二分查找(Java)

二分查找的前提的要查找的數組必須有序.數組

代碼以下: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,用了移位操做,這樣避免產生小數,並且不用強制類型轉換.循環

相關文章
相關標籤/搜索