計算機算法設計與分析之遞歸與分治策略——二分搜索


遞歸與分治策略

二分搜索

  我們所熟知的二分搜索算法是運用分治策略的典型例子,針對這個算法,先給出一個簡單的案例。

  目的:給定已排好序的n個元素a[0:n-1],現要在這n個元素中找出一特定的元素x。

  我們首先想到的最簡單的是用順序搜索方法,逐個比較a[0:n-1]中元素,直至找出元素x或搜索遍整個數組后確定x不在其中。這個方法沒有很好地利用n個元素已排好序的這個條件,因此在最壞的情況下,順序搜索方法需要O(n)次比較。

  而二分搜索方法充分利用了元素間的次序關系,采用分治策略,可在最壞情況下用O(logn)時間完成搜索任務。二分搜索算法的基本思想是,將n個元素分成個數大致相同的兩半,取a[n/2]與x作比較。如果x=a[n/2],則找到x,算法終止;如果x<a[a/2],則只在數組a的左半部繼續搜索x;如果x>a[a/2],則只在數組a的右半部繼續搜索x。具體算法可描述如下:

template<class Type>
int BinarySearch(Type a[], const Type& x, int n){
    //在a[0]<=a[1]<=...<=a[n-1]中搜索x
    //找到x時返回其在數組中的位置,否則返回-1
    int left = 0;
    int right = n-1;
    while (left <= right){
        int middle = (left+right)/2;
        if (x == a[middle])
            return middle;
        if (x > a[middle])
            left = middle+1;
        else
            right = middle-1;
    }
    return-1;    //未找到x
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM