首页 > 代码库 > 二分查找
二分查找
二分查找的前提的要查找的数组必须有序.
代码如下:
程序1
1 public class source { 2 3 public int binary_sort(int[] array, int item) { 4 int len = array.length; 5 int min = 0; //定义查找范围的开始 6 int max = len - 1; //定义查找范围的结尾 7 while(max > min) { //这里不能等于,不然可能死循环 8 if(array[min+(max-min)/2] == item) { 9 return (int)min+(max-min)/2;10 }11 else if(array[min+(max-min)/2] > item) {12 max = min+(max-min)/2;13 }14 else if(array[min+(max-min)/2] < item) {15 min = min+(max-min)/2;16 }17 }18 return -1;19 }20 21 public static void main(String[] args) {22 int[] a = {1,2,3,4,5,6,7,8,9,10};23 int n = -1;24 source sou = new source();25 System.out.println(sou.binary_sort(a, n)); 26 }27 }
程序复制下来就可以正常执行,这是自己看了原理后写的代码,网上找了例子,也贴上来对比一下
程序2
1 int binary_sort(int array[], int length, int value) 2 { 3 if(NULL == array || 0 == length) 4 return -1; 5 6 int start = 0; 7 int end = length -1; 8 9 while(start <= end){ 10 11 int middle = start + ((end - start) >> 1); 12 if(value =http://www.mamicode.com/= array[middle]) 13 return middle; 14 else if(value > array[middle]){ 15 start = middle + 1; 16 }else{ 17 end = middle -1; 18 } 19 } 20 21 return -1; 22 }
和别人的代码对比发现自己代码的问题:
1.复杂表达式变量应该定义成变量.
2.程序1中开始没有是max = len,没有减一,数组下标问题要注意.同理下面的两句代码.
3.程序2计算平均值没有直接除以2,而是(end - start) >> 1,用了移位操作,这样避免产生小数,而且不用强制类型转换.
二分查找
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。