二分法 總結

2021-07-26 14:11:17 字數 696 閱讀 7362

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...