前面已經有介紹二分搜尋的了,這裡再次貼出乙個**,這是《程式設計珠璣》第九章,對二分搜尋的最後的優化。
還和前面一樣,分成三個子程式,第乙個函式binarysearch是典型的二分搜尋,只不過把三次比較換成了兩次,第二個函式binarysearchge是返回搜尋值target的最左邊的乙個,如果不存在,就返回第乙個比target大的值的下標,如果沒有就返回n;第三個函式binarysearchle是返回搜尋值target最右邊的乙個,如果不存在,則返回第乙個比target小的值的下標。
#includeusing namespace std;
int binarysearch(int a,int n,int target)
int binarysearchge(int a,int n,int target)//等於的最左邊或大於的第乙個數
{ int lo=-1,hi=n;
while(lo+1!=hi)
{ int mid=lo+((hi-lo)>>1);
if(a[mid]>1);
if(a[mid]<=target)
lo=mid;//lo及其前面的都是》n)
{ cout<
二分搜尋 續
上一節 末尾提到了乙個問題,在順序陣列中找到t值第一次出現的位置。其實這也是一種二分搜尋的變形。思路如下 我仍然使用l和u作為陣列的邊界值,t就包含在l和u指示的陣列範圍中。但不變關係式變為x l 0,x 1 t 程式中並沒有這兩個元素 二分搜尋的 如下 1 int binarysearch int...
二分搜尋總結
看了這篇帖子,對思路很簡單,細節是魔鬼感同身受,故自己來做個總結。在乙個一維有序陣列 nums 中查詢 target 是否存在,存在返回 index 不存在返回 1 public int binarysearch int nums,int target else if nums mid target...
幾種二分搜尋總結
1.如果有重複,找的是最左邊 leftmost 的那個的index。如果不存在,返回的是應該插入的index,這裡陣列長度是可變的。見乙個easy題 35題 class solution else return lo 2.如果存在,返回index 如果有重複的,因為它找到重複中的任何乙個就retur...