參考了c語言中折半查詢法(二分法)的實現
先附上**
#includeint binsearch(int arr,int len,int key) //折半查詢法(二分法)
{ int low=0; //定義初始最小
int high=len-1; //定義初始最大
int mid; //定義中間值
while(low<=high)
{ mid=(low+high)/2; //找中間值
if(key==arr[mid]) //判斷min與key是否相等
return mid;
else if(key>arr[mid]) //如果key>mid 則新區間為[mid+1,high]
low=mid+1;
else //如果key(此**為參考部落格中複製貼上的**)
一直困惑於為什麼不能直接把low=mid或者high=mid,後來看到乙個例子,如下:
若要查詢98,如果按照我原本的做法,當low=9,high=10時,mid將會一直等於9,這將一直查詢不到98。
如果按照正確做法,不僅可以直接將所要查詢的數不屬於的那一部分直接捨去(比如當mid不等於所要查詢的數,low=mid+1或者high=mid-1,就可以直接將mid所代表的數在後續判斷中捨去),還可以避免兩數相除取整一直得到同乙個數的bug。
補充說明:因為mid是中間值,low是有序陣列的小端,high是大端,當所查詢值k不是陣列中間值mid時,如果kmid,所查詢陣列區間為[mid+1,high],此時low=mig+1,陣列mid值是直接比較的,k=mid,直接返回以mid為下標的值(此為採用他人回覆內容)。
二分查詢演算法c語言 演算法總結 二分查詢法
在leetcode的題目討論中,經常會有些大神將某一類的題目結題思路給整理了出來,感覺受益匪淺。受之啟發,萌生了自己也總結一下常見演算法的解題思路的想法,希望可以讓自己在這個總結的過程中可也融匯貫通這些思路,同時可以給後來者以啟發。從 開始好呢?就從經典的二分查詢法開始吧,這個演算法幾乎所有學過計算...
C語言二分法查詢法
c語言 二分查詢法 所謂的二分查詢法,其實是一種有序的查詢方法,也稱折半查詢 binary search 如果是無序的則要先進行排序操作。基本思想是 目標值通過與中間元素比較,可分為三種情況 第一種情況 目標值與中間元素相等,查詢結束 第二種情況 目標值比中間元素大,則把後半部分的中間元素與目標值比...
二分查詢法(Go語言)
二分查詢法,在乙個有序的數列裡,把中間元素v與查詢元素target相比較 二分查詢法 迭代法 go語言 package main import fmt 二分查詢 前提必須在有序的陣列裡,查詢target 如果找到target,返回相應的索引index 如果沒有找到target,返回 1 時間複雜度o...