關於二分法的理解和總結

2021-10-10 18:55:09 字數 1168 閱讀 8478

首先書寫二分法**存在下列三個易錯點:

1. 計算mid防止溢位

2. while判斷越界問題

3. left=mid+1,right=mid-1問題

先看第乙個mid取值問題,我們知道integer的取值是有範圍的,一旦超出就會報錯

- integer.max_value表示int資料型別的最大取值數:2 147 483 647

- integer.min_value表示int資料型別的最小取值數:-2 147 483 648

第二個問題while判斷的問題

while(left <= right)的終止條件是 left == right + 1,寫成區間的形式就是 [right + 1, right],或者帶個具體的數字進去 [3, 2],可見這時候搜尋區間為空,因為沒有數字既大於等於 3 又小於等於 2 的吧。所以這時候 while 迴圈終止是正確的,直接返回 -1 即可。

while(left < right)的終止條件是 left == right,寫成區間的形式就是 [right, right],或者帶個具體的數字進去 [2, 2],這時候搜尋區間非空,還有乙個數 2,但此時 while 迴圈終止了。也就是說這區間 [2, 2] 被漏掉了,索引 2 沒有被搜尋,如果這時候直接返回 -1 就可能出現錯誤。

當然,如果你非要用 while(left < right) 也可以,我們已經知道了出錯的原因,就打個補丁好了

原文引用自
第三個問題是left,right問題直接上**

public static void main(string args) ;

//使用二分法查詢4的位置

int left=0;

int right=arr.length-1;

int target=115;

while (left<=right)else if(arr[mid]>target)else if(arr[mid]}

}

上面這段**在執行到12,13兩個位置時,進入死迴圈。left=12,right=13,mid=12無限重複下去,

所以最後寫為上面**樣式。

二分法 總結

1 二分查詢 binarysearch 二分查詢又稱折半查詢,它是一種效率較高的查詢方法。二分查詢要求 線性表是有序表,即表中結點按關鍵字有序,並且要用向量作為表的儲存結構。不妨設有序表是遞增有序的。2 二分查詢的基本思想 二分查詢的基本思想是 設r low,high 是當前的查詢區間 1 首先確定...

關於二分法查詢

今天在 c primer 第五版page101上看見乙個問題 在二分法搜尋中為什麼用的是 mid beg end beg 2 而非 mid beg end 2 從我原先的思維,去兩個數的中間值確實是兩數相加除以二,所以想了好一會兒也沒想明白,無奈之下只好求助google了 1.beg end有溢位風...

關於二分法查詢

與一般的查詢方式相比二分法查詢則顯得高效快速,即只要較少的查詢次數就可以完成快速地搜尋。在進行二分法查詢前需要先對資料進行排序,定義left,right兩個變數,然後在這組資料中找到mid right left right 2,然後將待查詢元素與mid所指元素進行比較,如果相等則返回,如果查詢元素大...