Java编程题目-6:二分法搜索
来源:互联网 发布:最新全国省份数据库 编辑:程序博客网 时间:2024/06/07 01:01
二分法搜索
二分法搜索适用于有序的线性结构,比如java当中的数组、List、队列等。只有是有序的才能通过二分法实现查找,因为需要去判断搜索目标与头尾元素的区间关系。时间复杂度为O(logN/log2),空间复杂度为O(1)。
下面开看看代码实现:
public static int searchByBisection(int[] arr,int target){ int startIndex = 0; int sternIndex = arr.length-1; while(startIndex<=sternIndex){ int middleIndex = (startIndex+sternIndex)/2; if(arr[middleIndex]<target){ startIndex = middleIndex+1; }else if(arr[middleIndex]>target){ sternIndex = middleIndex-1; }else{ return middleIndex; } } return -1; }
如果检索成功就返回目标元素的对应的下标,检索不到就返回-1。
实现方式有很多种,但是考虑到代码的简洁、高效的话,还有很多需要修改的地方。
还有一种控制循环的方式,就是使用for循环,循环的最大次数等于时间复杂度,当搜索到目标后可以直接退出循环,返回结果。
代码如下:
public static int searchByBisection(int[] arr, int target) { Arrays.sort(arr);// 对数组进行排序处理 int searchItem; int len = arr.length; int headIndex = 0; int sternIndex = len - 1; int midIndex; if (len == 0 || arr == null) { return -1; } int n = (int)(Math.log(len)/Math.log(2))+1; for(int i=0;i<n;i++){ midIndex = (headIndex + sternIndex) / 2; searchItem = arr[midIndex]; if (target < searchItem) { sternIndex = midIndex; } else if (target > searchItem) { headIndex = midIndex; }else if(target == searchItem){ return midIndex; }else{ return -1; } } return -1; }
这其中一些细节与上一个代码段不一样:
sternIndex = midIndex;headIndex = midIndex;
这也正是性能上的一些差距。
0 0
- Java编程题目-6:二分法搜索
- JAVA 二分法搜索
- 二分法搜索
- 搜索:二分法
- 【搜索】二分法
- 二分法搜索
- 二分法搜索
- 二分法搜索
- 二分法搜索
- 二分法搜索(JAVA语言实现)
- SDAU编程练习二-------二分法and搜索总结
- Java 编程下的二分法查找
- Java 编程下的二分法查找
- Java 编程下的二分法查找
- java 冒泡排序和二分法混合面试题目
- 二分法经典题目
- 二分法练习题目
- java编程题目
- Codeforces Round #269 (Div. 2) C 递推+打表
- 这几天学习到的Java设计模式
- mysql5.7.14 windows主从配置简记
- 如何用好 Google 等搜索引擎?
- 关于初次搭建环境第一次运行react-native run-android命令报错问题
- Java编程题目-6:二分法搜索
- C语言str函数系列
- mysql
- ios中NSUserDefaults的用法
- JSF之Action 与ActionListener的区别
- H5学习之11 body的background.div的background font的设置
- ubuntu常用指令
- ActionBar和ToolBar显示返回箭头的方法
- Android中的remoteView