Java实现二分查找
来源:互联网 发布:知乎活跃用户数量 编辑:程序博客网 时间:2024/06/05 15:26
public class BinarySearch { /** * 二分查找-非递归 * @param 整数顺序数组 * @param 目标数字 * @return 如果存在则返回元素所在下标,不存在则返回-1 */ public static int search1(int[] arr, int num) { int min = 0; //最小下标 int max = arr.length - 1; //最大下标 if(num < arr[min] || num > arr[max]) { //先判断num是否在arr下标范围内,不在则返回-1 return -1; } while(min <= max) { //用while循环逐次对半缩小查找区间间 //范围最后缩小到只有两个数或一个数时,直接判断,防止所查数字不在数组中而出现死循环 if(min == max-1 || min == max) { if(arr[min] == num) return min; else if(arr[max] == num) return max; else return -1; } int middle = (min + max)/2; //定义区间中间元素下标 if(arr[middle] == num) { //当中间元素和num相等时返回 return middle; } else if (arr[middle] < num) { //num比中间元素大,则去后半段middle-max查找 min = middle; } else { //num比中间元素小,则去前半段min-middle查找 max = middle; } } return -1;//如果没查到则返回-1 } /** * 二分查找-递归 * @param arr 整数顺序数组 * @param num 目标数字 * @param min 区间最小下标 * @param max 区间最大下标 * @return 如果存在则返回元素所在下标,不存在则返回-1 */ public static int search2(int[] arr, int num, int min, int max) { if(min == max-1 || min == max) { if(arr[min] == num) return min; else if(arr[max] == num) return max; else return -1; } int middle = (min + max)/2; if(num < arr[min] || num > arr[max]) { return -1; } if(num == arr[middle]) { return middle; } else if (num < arr[middle]) { return search2(arr,num,min,middle); } else { return search2(arr,num,middle,max); } } public static void main(String[] args) { //测试非递归 int[] arr = {1,3,5,7,8,10,12}; int index = search1(arr, 7); if(index == -1) System.out.println("所查数组无此元素!"); else System.out.println("元素下标为:" + index); //测试递归 index = search2(arr, 6, 0, arr.length-1); if(index == -1) System.out.println("所查数组无此元素!"); else System.out.println("元素下标为:" + index); }}
需要注意的地方在于最后一次二分后,查找范围缩减为1~2个数,这时候需要直接去比较是否有想要查的数;如果不添加判断,当数组元素没有所查的数时,会出现重复最后一次二分无限判断的死循环;测试结果:
元素下标为:3
所查数组无此元素!
阅读全文
0 0
- Java实现 二分查找
- Java实现二分查找
- java实现二分查找
- java实现二分查找
- Java二分查找实现
- java 实现二分查找
- Java实现二分查找
- Java实现二分查找
- JAVA实现二分查找
- JAVA实现二分查找
- 二分查找java实现
- java实现二分查找
- 二分查找 java实现
- Java实现二分查找
- Java实现二分查找
- Java实现二分查找
- java实现二分查找
- Java 实现二分查找
- Play framework session和flash有效范围
- Spring学习笔记一
- hihocoder 1043 : 完全背包
- Cocos2d-x《雷电大战》(6) 智能敌机AI来袭–飞行路径算法设计与实现(上)
- Python爬虫进阶四之PySpider的用法
- Java实现二分查找
- POJ2692假币问题
- 小结
- 点击按钮后5s内不能再次点击该按钮
- Sublime text 3 插件
- lintcode--买卖股票的最佳时机II
- Error:Conflict with dependency 'com.google.code.findbugs:jsr305'
- linux省略root密码,自动登录root方法
- Seay-svn源代码备份漏洞