一:
/*
關於二分查詢:
1.查詢目標值:
當right=nums.size()-1時,判定條件應該為left<=right right賦值時也應該是mid-1;
當right=nums.size()時,判定條件應該為left=)目標值的數*/
int search(vector& nums, int target)
return right;
}/*可變形為查詢最後乙個小於(<)目標值的數:上述**最後返回right-1;*/
/*3. 查詢第乙個大於(>)目標值的數*/
int search(vector& nums, int target)
return right;}/*
返回最後乙個相同的數字的下乙個位置。
if (nums[mid] <= target) 判定條件多了乙個等號
最後返回為right-1;
可變形為查詢最後乙個不大於(<=)目標值的數:最後返回為right-1;
*/
#includeusing namespace std;
int binfindvalue(int* arr, int left, int right,int key)//遞迴二分查詢
int mid = (right - left + 1) / 2 + left;
if (arr[mid] == key)
if (arr[mid] < key )
if (arr[mid] > key)
}int binfindvaluenice(int* arr,int len,int key)//非遞迴二分查詢
int left = 0;
int right = len - 1;
while (left<=right)
else if (key > arr[mid])
else
}return pos;
}int main()
;int len = sizeof(arr) / sizeof(arr[0]);
cout << binfindvaluenice(arr,len,5) << endl;
cout << binfindvalue(arr,0,len-1,55) << endl;
return 0;
}
關於二分查詢
面試過很多人,對於初級程式設計師來說,我一般會給他簡單的已經比較成熟的演算法來考察他,一來來他對既有演算法的熟悉度,二來考察他對於一般程式設計問題的邏輯思維能力,二分查詢是有序數列中查詢的常用演算法,也是比較容易實現的查詢演算法之一,這個是stl的實現 template randomaccessit...
關於二分查詢
在電腦科學中,二分搜尋 英語 binary search 也稱折半搜尋 英語 half interval search 1 對數搜尋 英語 logarithmic search 2 是一種在有序陣列中查詢某一特定元素的搜尋演算法。搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過...
關於二分查詢
luogu 1571 眼紅的medusa 二分模版題 include using namespace std int n,m,x,l,r,mid,cnt,a 110000 b 110000 c 110000 intmain if x b l cnt c cnt x for int i 1 i cou...