二分查詢,乙個常用的查詢的演算法,只要涉及二分法,你要用正常的演算法會很大可能會報錯:
時間超時,因為測試資料很誇張,有多誇張呢,差不多0≤n≤10,00,000,000
只要寫二分你就能得到ac啦;
二分查詢就是巧妙的判斷,
3個數掌控著陣列.
資料需要是排好序的.
以下是二分查詢函式**:
-小到大排序
int halfsearch(int arry,int start,int end,int key)
{ while(start<=end)
{ int mid=(start+end)/2;
if(arry[mid]==key)return mid;
else if(arry[mid]>key)end=mid-1;
else if(arry[mid]這樣你就暢通無阻了
想要從大到小的?
給你:int halfsearch(int arry,int start,int end,int key)
{ while(start<=end)
{ int mid=(start+end)/2;
if(arry[mid]==key)return mid;
else if(arry[mid]>key)start=mid+1;
else if(arry[mid]下次,咱來找到練手題.
給個圖示:
bye
迭代二分查詢二分查詢
在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...
bsearch 函式(二分查詢)
原部落格 bseach 函式用於二分查詢。void bsearch const void key,const void base,size t nmem,size t size,int comp const void const void key為要查詢的數,base為該陣列,nmem為查詢長度 一...
二分查詢函式的使用
二分查詢函式的使用 lower bound 和upper bound 都是利用二分查詢的方法在乙個排好序的陣列中進行查詢的。在從小到大的排序陣列中,lower bound begin,end,num 從陣列的begin位置到end 1位置二分查詢第乙個大於或等於num的數字,找到返回該數字的位址,不...