重溫二分查詢演算法

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

點選(此處)摺疊或開啟

  1. 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 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;



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1451131/,如需轉載,請註明出處,否則將追究法律責任。

相關文章