1、二分查詢(binarysearch)
二分查詢又稱折半查詢,它是一種效率較高的查詢方法。
二分查詢要求:線性表是有序表,即表中結點按關鍵字有序,並且要用向量作為表的儲存結構。不妨設有序表是遞增有序的。
2、二分查詢的基本思想
二分查詢的基本思想是:(設r[low,high]是當前的查詢區間)
(1)首先確定該區間的中點位置:
(2)然後將待查的k值與r[mid].key比較:若相等,則查詢成功並返回此位置,否則須確定新的查詢區間,繼續二分查詢,具體方法如下:
①若r[mid].key>k,則由表的有序性可知r[mid,n].keys均大於k,因此若表中存在關鍵字等於k的結點,則該結點必定是在位置mid左邊的子表r[1,mid-1]中,故新的查詢區間是左子表r[1,mid-1]。
②類似地,若r[mid].keyk)
high=mid-1; //繼續在r[low,mid-1]中查詢
else
low=mid+1;//繼續在r[mid+1,high]中查詢
}//重點注意 :輸出的時候為"left-1",因為,若為mid,則可能沒有驗證最後一次,若為left或者right同理沒有驗證,right-1是不符合要求的,mid-1更不可以,因為mid並不確定它的變化大小。
return 0;//當low>high時表示查詢區間為空,查詢失敗
} //binsearh
二分法細節總結
二分法的思想很容易理解,但是細節處理卻是乙個難點。很容易就容易出錯。這裡總結一下這些細節。區間為 left,right 情況 右邊指標取不到元素 初始化 left 0 right arr.length 迴圈條件 left right 注意事項 left 的更新是取到值的情況 right的更新是不取到...
二分法小總結
主要分為兩種 區間按序列劃分和區間按值劃分 區間按序列劃分 這種比較常見,一般是針對有序陣列或者部分有序陣列 如旋轉有序陣列 m是序列的中點,不斷的縮小區間。33 81 153 154 69 162 4 74 區間按值劃分 主要是無序陣列會使用,m取可能結果的最小值和最大值的中值,所以就是不停的猜m...
C 二分法查詢,遞迴二分法
用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...