1. 程式人生 > 其它 >折半查詢法&二分查詢法

折半查詢法&二分查詢法

 1 int main(){
 2 int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 3 int sz = sizeof(arr) / sizeof(arr[0]);用於計算陣列中的元素個數
 4 int left = 0,right =sz-1 ;
 5 int k = 7;
 6 while (left <= right)只有當兩個數之間有交集是才能運算
 7 {
 8 int mid = (left + right) / 2;
 9 if (arr[mid] > k)
10 {
11 right = mid - 1;
12 }
13 else
if (arr[mid] < k) 14 { 15 left = mid + 1; 16 } 17 else 18 { 19 printf("找到了,下標是%d\n", mid); 20 break; 21 } 22 } 23 if (left>right) 24 printf("找不到\n"); 25 return 0; 26 }//結果為:找到了下標是6

思路:表中元素是按升序排列(一定是按照順序排列,將表中間位置(mid)記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成左(left)、右(right)兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字

,則進一步查詢左子表(right = mid - 1)否則進一步查詢右子表(left = mid + 1)。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。記住,left座標一定大於right座標。(迴圈條件)。所以時間複雜度可以表示O(h)=O(log2n)