1. 程式人生 > >折半查詢——C語言

折半查詢——C語言

折半查詢是一個比較常用的查詢方法。相較於最原始的這個

查詢過程為:先確定待查詢記錄所在的範圍(區間),然後逐步縮小範圍直到找到或找不到該記錄為止。

具體是設立三個指標low,hight,mid,分別指向待查詢的陣列下界,上界,中間值。通過一次次比較需查詢數和中間值的大小,來縮小待查詢範圍。

程式碼實現:

/**折半查詢**/ int search_bin(stable ST,int key) {     int low,high,mid;///low用於指向待查元素的下界,hight用於指向上界,指標mid指向區間中間位置。mid=[(low+hight)/2]     low=1;///將low先初始化為1     high=ST.L;///將hight先初始化為待查陣列最大長度     while(low<=high)     {         mid=(low+high)/2;         if(key==ST.data[mid])///如果需要查詢的數剛好為中間值             return mid;///返回中間值         else if(key<ST.data[mid])///如果需查詢的數在中間值左邊             high=mid-1;///則將上界定為原來的中間值         else             low=mid+1;///如果在右邊,則改變下界的值     }     return 0; } 執行結果:

時間複雜度:O(logn)

若假設總共有n個元素,每次查詢的區間大小就是n,n/2,n/4,…,n/2^k,其中k就是迴圈的次數。所以時間複雜度為O(logn)。