Java实现二分查找算法
二分查找(binary search),也称折半搜索,是一种在 有序数组 中 查找某一特定元素 的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。
- 时间复杂度:折半搜索每次把搜索区域减少一半,时间复杂度为O(log n)。(n代表集合中元素的个数)
- 空间复杂度: O(1)。虽以递归形式定义,但是尾递归,可改写为循环。
递归(自己调用自己)
int binarysearch(int array[], int low, int high, int target) {if (low > high) return -1;int mid = low + (high - low) / 2;if (array[mid] > target)return binarysearch(array, low, mid - 1, target);if (array[mid] < target)return binarysearch(array, mid + 1, high, target);return mid;
}
非递归:
int bsearchWithoutRecursion(int a[], int key) {int low = 0;int high = a.length - 1;while (low <= high) {int mid = low + (high - low) / 2;if (a[mid] > key)high = mid - 1;else if (a[mid] < key)low = mid + 1;elsereturn mid;}return -1;
}
Java实现二分查找算法相关推荐
- 二分查找算法java
二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元 ...
- java 二分查找_JAVA 实现二分查找算法。我知道你会,但没你想象的那么简单
二分查找算法定义:二分查找(binary search),也称折半搜索,是一种在 有序数组 中 查找某一特定元素 的搜索算法.搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结 ...
- Java 二分查找算法及效率比较
1.前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的实现默认为升序 2.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后:将要查找的值和数组的中值 ...
- 二分查找算法(递归与非递归两种方式)
首先说说二分查找法. 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回1,失败返回对应的数组下标. 采用非递归方式完成二分查找法.java代码如下 ...
- java实现二分查找-两种方式
二分查找是一种查询效率非常高的查找算法.又称折半查找.起初在数据结构中学习递归时实现二分查找,实际上不用递归也可以实现,毕竟递归是需要开辟额外的空间的来 辅助查询.本文就介绍两种方法二分查找算法思想有 ...
- list 查找_五千字长文带你学习 二分查找算法
点击上方"与你一起学算法",选择"星标"公众号 重磅干货,第一时间送达 二分查找的思想 提及二分查找算法,我想大部分人都不陌生,就算不是学计算机的,基本上也都使 ...
- 二分查找算法应用-实现求平方根函数
使用二分查找算法,尽可能的逼近求解平方根.算法的思路很简单:设置三个标识:left=0,right=x(x为输进去的被开方数) mid=(left+right)/2,然后用mid*mid-x的绝对值去 ...
- 关于《算法(第四版 谢路云译)》标准库In、Out、StdOut和StdIn的正确配置和调用经验分享(以BinarySearch二分查找算法为例)
本人初学<算法(第四版 谢路云译)>有一段时间了,对于初学者按书敲完第一个BinarySearch二分查找算法发现运行错误,我相信大家跟我一样内心是崩溃的.还好经过翻看多个相关论坛以及自己 ...
- 二分查找算法的万能公式(LeetCode35、704、1095)
二分查找常常用于有序数组的查找操作.当然如果是一个问题,数组的顺序满足特定条件(不仅仅是升序或者降序,也可以是先升后降或先降后升),就可以通过逐步排查,缩小问题的规模的方式找到,这种算法也是二分查找算 ...
最新文章
- C# 尝试读取或写入受保护的内存,这通常指示其他内存已损坏。错误类型为:System.AccessViolationException。...
- 在不是Thread类的子类中,如何获取线程对象的名称呢?
- leetcode83 删除排序链表中的重复元素
- Linux 6安装kde桌面,CentOS 5/6 安装 GNOME 或 KDE 桌面
- 简便无刷新文件上传系统
- 新机发布会用鸿蒙吗,鸿蒙操作系统及华为全场景新品发布会即将到来,硬件生态发展有望迎来加速度...
- 编译安装imagick出错:make: *** [imagick_class.lo] Error 1
- 大工18春《c和c语言程序设计》,东大21春《高级语言程序设计基础》在线平时作业1题目及答案...
- Acronis Disk Director 增大c盘
- 二次解析视屏 php,最新PHP二次视频解析源码 带后台版
- git基本命令、提交pr
- php 方法名前加 amp,PHP的返回引用(方法名前加)
- 13 标准模板库STL【C++】
- swift和swiftui_SwiftUI和UIStackflow问题
- 微信小程序顶部下拉菜单栏
- BZOJ4372: 烁烁的游戏(动态点分治)
- 《嵌入式 - Lwip开发指南》第3章 移植LWIP(无系统)
- InstallShield 2010集成 net Framework 4的安装包制作
- c语言翻转棋ai算法,黑白棋游戏(也叫翻转棋)(AI 版)
- 36岁女博士找教职之路,真的懵了....
热门文章
- vue实现对数据的增删改查(CURD)
- jeecg中的树形控件demo
- java 注解(annotation)基础学习
- WPF 学习笔记 路由事件
- 配置文件是什么东西?
- 什么是c语言内存编码,c语言内存泄露示例解析
- 图片抓取_小小爬虫批量抓取微信推文里的图片
- php+go+to,让phpstrom支持codeigniter框架实现 (GO TO )转到定义的功能
- python中如何调用类takes no arguments_关于python中的 take no arguments 的解决方法
- Linux驱动实现灯循环闪烁,TQ2440上LED灯闪烁效果的驱动程序实现