标签:
二分查找的前提的要查找的数组必须有序.
代码如下:
程序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 == 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,用了移位操作,这样避免产生小数,而且不用强制类型转换.
标签:
原文地址:http://www.cnblogs.com/hking-jff/p/4192240.html