二分查詢公升序陣列

2021-10-04 01:56:35 字數 1179 閱讀 2473

二分法查詢問題,在這裡記錄一下:

主要是注意點如下:

(1)使用[left,right]雙閉合區間來查詢,因此while必須是<=,因為只有如此才能在迴圈結束的時候是left = right + 1,這樣保證所有的資料都遍歷完;

(2)mid = left + (right - left) / 2 比 mid =(left + right) / 2的好處是避免溢位;

(3)在只是查詢是否乙個值存在陣列裡面的時候,當number.at(mid) == target的時候,直接返回即可;如果要求第乙個出現的位置,需要number.at(mid) == target的時候,right = mid - 1;同理,如果要求最後乙個出現的位置,需要number.at(mid) == target的時候,left = mid + 1;

(4)在整個**裡面不要有else,盡量使用else if把所以的情況都分解清楚,這樣便於查詢;

(5)在求第乙個出現的位置的時候,由於終止條件是left = right + 1,因此要判斷left < number.size(),不能出現越界;同理,當求最後乙個出現的位置。由於終止條件是right = left - 1(left = right + 1),因此要判斷right >=0,不能出現越界;

具體**:

1.只求target是否存在在number中:

class solution  else if (nums.at(mid) > target)  else 

}return -1;

}};

2.求第乙個和最後乙個出現的位置,放在vector的第一位和第二位

class solution 

result.push_back(findtargetpose(nums, target, true));

result.push_back(findtargetpose(nums, target, false));

return result;

}int findtargetpose(vector& nums, int target, bool start_flag)  else if (nums.at(mid) < target)  else  else }}

if (start_flag)  else 

return -1;

}};

二分查詢有序陣列

對於乙個有序字串陣列,用二分法查詢某一字串是否存在於該字串陣列中。函式原型為 bool binarysearch const vector array,const string target 注意這裡的有序指的是字典序,如字串陣列 a,ab,ac,bc,cd,d 就是有序字串陣列,而 a,b,ab ...

已排序陣列二分查詢

劉汝佳 紫書提供方法 正確答案在 x,y 區間之內,即不會包括y。這種方法老是兩個細節搞不順,如下標註 int bsearch int a,int x,int y,int test return 1 沒有正確答案時返回 1 下面是一種邏輯清晰通順的實現寫法 只有兩個小細節不一樣,但理解起來很自然 以...

二分查詢(基於有序陣列)

採用一對平行的陣列,乙個儲存鍵乙個儲存值 實現的核心是rank 方法,它返回表中小於給定鍵的鍵的數量。二分查詢法 將被查詢的鍵和子陣列的中間鍵比較。如果被查詢的鍵小於中間鍵,就在左子陣列中繼續查詢,如果大於就在右子陣列中繼續查詢,否則中間鍵就是我們要找的鍵。實現 rank 採用了二分查詢法,rank...