首页 > 代码库 > 二分查找

二分查找

二分查找的前提的要查找的数组必须有序.

代码如下:

程序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,用了移位操作,这样避免产生小数,而且不用强制类型转换.

 

二分查找