二分查找的前提的要查找的數組必須有序.數組
代碼以下:spa
程序1code
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 }
程序複製下來就能夠正常執行,這是本身看了原理後寫的代碼,網上找了例子,也貼上來對比一下blog
程序2it
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 }
和別人的代碼對比發現本身代碼的問題:class
1.複雜表達式變量應該定義成變量.變量
2.程序1中開始沒有是max = len,沒有減一,數組下標問題要注意.同理下面的兩句代碼.原理
3.程序2計算平均值沒有直接除以2,而是(end - start) >> 1,用了移位操做,這樣避免產生小數,並且不用強制類型轉換.循環