二分查詢,又叫折半查詢,顧名思義,可以通過比較中間位置是否與要查詢的相等。如果相等即找到了目標,否則,看目標落在中間位置左側還是右側,然後再同樣的到對應區間去找。
假設我們有這樣乙個陣列
#define maxsize 10
int array[maxsize]
=;
我們可以標記左下標以及右下標
int left =0;
int right = maxsize -
1;
所謂折半,即下標,要搜尋的位置折半
mid =
(left + right)/2
;
我們需要乙個迴圈來找尋目標整數,此處要確定迴圈結束條件,我們也可以先考慮比較的過程,即確定每乙個分支落在左側,右側,相應的下標需要做什麼(移動到新位置),當然如果此時查詢到我們跳出即可
while
(left <= right)
printf
("not find\n"
);
有同學可能會問,為什麼新的left = mid + 1,新的right = mid + 1,因為當輪迴圈num != ar[mid],新的查詢當然要到剩餘區間去找啊。此時我們可以很容易確定迴圈跳出條件,當left > right時,即左下標越過右下標,其實就已經遍歷完了,目標不在陣列中。
//三個引數,陣列位址,陣列大小,目標整數
intbinary_search
(int ar,
int n,
int num)
else
if(num < ar[mid]
) right = mid -1;
else
left = mid +1;
}return ret;
}
這麼寫當然是沒問題的。其實根據二分查詢的定義,我們也可通過遞迴來實現。
下次回來寫,似乎有點麻煩。。。
c 二分查詢
二分查詢又稱折半查詢,它是一種效率較高的查詢方法。二分查詢要求 線性表是有序表,即表中結點按關鍵字有序,並且要用向量作為表的儲存結構。不妨設有序表是遞增有序的。public class program else return 1 查詢失敗 public static void main string...
二分查詢C
雖然二分查詢思路很簡單,但實現起來需要注意很多細節。如區間是閉合區間還是前開後閉區間,迴圈的退出條件是left right 還是 left right,下一步搜尋是使用mid還是mid 1等。普通二分查詢 遞迴 intbinary search const vector int nums,const...
C二分查詢
include intbinarysearch list l,elementtype x int flag floor high low 2 int c 1 while l data flag x c l last else if l data flag x if c l last else 題目 ...