用C語言實現二分查詢演算法

2021-07-12 04:01:23 字數 956 閱讀 9206

二分查詢演算法思想非常簡單,就是折半查詢乙個有序序列,在這裡,我用二分查詢乙個順序排列的整形陣列。若用c實現的話我們需要注意以下幾個方面:

1.如何判斷查詢完成,定義返回值含義,定義退出迴圈條件

2.如何處理邊界問題,例如1 2 3 這個序列,當我們要查詢1或者3時,會不會使程式出現bug

3.對於數列來說,我們通常用整形儲存其下標,二分查詢若取下標中間數,則會出現什麼樣的問題?這些問題是否會影響我們的查詢,若有問題,則應該如何規避?

通常情況,作為乙個初學者,我甚至覺得二分查詢過於簡單,不值一提,最近經過思考,二分查詢演算法對於理論的要求並不是很高,但是若要把它變為有可行性的程式**,則我們需要思考諸多的細節,否則這個**寫出來則是錯誤百出的。

如何解決第乙個問題,因為我們了解的二分查詢的思路其實就是折半查詢,要有左邊界與右邊界我們才能確定中間元素,當左邊界與右邊界重合的時候,這時查詢物件就變為乙個元素的,若它也不是索要查詢的物件,那麼在所查詢的集合中便沒有所需的元素。這樣我們就清楚地定義出來了所需引數,以及退出查詢的條件。我們需要乙個左邊界以及右邊界,還有中間元素,若右邊界比左邊界小(左比右大)時,退出迴圈,返回異常。若否,則執行 查詢語句。

這裡的查詢語句如何設計呢,若不結合第2,3個問題,我們可以隨手寫出**:

while(left<=right)

else if (x > arr[mid])

else

}return -1;

}int main()//測試用例

;int lengh = sizeof(arr) / sizeof(arr[0]);

for (int i = 0; i < 12; i++)

system("pause");

return 0;

}

若有不足之處,希望批評指正

本文出自 「pawnsir的it之路」 部落格,請務必保留此出處

二分查詢C語言實現

二分查詢的簡單實現 include include include define n 20 define n rand 200 int cmp const void a const void b 返回在陣列中位置 int b search int a,int p,int q,int key retu...

C語言實現二分查詢

下面為在陣列a 10 中實現二分查詢的 include includevoid binary search int arr,int right,int k 二分查詢函式 else if mid arr k else if left right printf 找不到!n int main int re...

二分查詢(C語言實現)

二分查詢 前提就是資料必須有序,然後從資料的中間位置開始查起,如果中間值比key小,則從中間值位置開始繼續查詢,反之剛從開頭到中位置查詢,重複以上過程直到結束。從 實現上來說,既可以用迴圈實現,也可以用遞迴實現。下面將用這兩種方法以c語言實現二分查詢。遞迴 include int binary fi...