二分查詢演算法思想非常簡單,就是折半查詢乙個有序序列,在這裡,我用二分查詢乙個順序排列的整形陣列。若用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...