1. 程式人生 > 其它 >重溫二分查詢演算法(r4筆記第66天)

重溫二分查詢演算法(r4筆記第66天)

二分查詢在學習演算法的時候會涉及到,算是一個基本的分治思想,對於演算法的實現大家也都是很熟悉的,但是這個時候真會犯眼高手低的毛病。不信你自己試試,看你能夠在段時間內寫出可執行的二分查詢演算法。 二分查詢演算法的思想非常易於理解,但是能夠寫出一個準確的二分查詢程式絕非一個很簡單的事情,從歷史上來看,而非思想早在1946年就出現了,但是第一個完全正確的二分查詢演算法確實在1962年出現,計算機專家曾說過,90%以上的計算機專家不能再2個小時內寫出完全正確的二分查詢演算法。我反正是應了這句話,不過我不是計算機專家。 我們來看一個比較標準的二分查詢演算法

package new_test;


public class BinarySearch {
int arr[];
public static void main(String args[]){
test();
}
public int binarySearch(int t,int[] arr){
int left=0;
int right=arr.length;
int middle;
while(left<=right){
middle=(left+right)/2;

if(t==arr[middle]){
return middle;
}
if(t>arr[middle]){
left=middle+1;
}
if(t<arr[middle]){
right=middle-1;
}
}
return -1;

}

public static void test(){
int[] arr=new int[]{1,2,5,7,8,10,11,15,19,20};
System.out.println(	new BinarySearch().binarySearch(8, arr));
}
}

執行結果是4,即arr[4]=8 其實這個演算法還有一些值得思考的細節。比如求得兩個數之和的平均數 如果直接寫為middle=(left+right)/2就很可能出現數值溢位的情況。 可以使用下面的形式來避免,演算法博大精深,細節決定成敗。 middle=left+(right-left)/2;