折半查詢——C語言
阿新 • • 發佈:2018-12-11
折半查詢是一個比較常用的查詢方法。相較於最原始的這個
查詢過程為:先確定待查詢記錄所在的範圍(區間),然後逐步縮小範圍直到找到或找不到該記錄為止。
具體是設立三個指標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)。