最近看一些演算法題發現這些問題到最後落實到實現上都是程式設計基礎的體現,包括對基本的for,if,else,while等語句的理解程度,還有對迴圈遞迴的理解。所以還是得回歸最基本的演算法,現在去學習那些高深複雜的dp,kmp,紅黑樹未免有點好高騖遠。目前應該堅持基礎,打好基礎,畢竟不是cs科班出身。言歸正傳,二分查詢就是乙個最基礎的演算法。它的時間複雜度o(logn)。分為迭代實現和遞迴實現兩種,如下:程式沒有經過很多測試,應該有bug,歡迎指正。
int binarysearch(int * a, int beg, int end, intelem)
else
if(a[mid] >elem)
else
return
binarysearch(a, beg, end, elem);
}else
}int binarysearchrecursive(int *a, int length, int
elem)
return binarysearch(a, 0, length-1
, elem);
}int binarysearchiterator(int *a, int length, int
elem)
int beg = 0
;
int end = length-1
;
int mid = 0
;
while(beg <=end)
else
if(a[mid] >elem)
else
}return -1
;}
這裡主要注意二分查詢時,兩個下標的變化,以及最終結束查詢的判斷條件是beg>end(查詢失敗),或者(a[mid]==end)。時間有限,**質量一般,輕噴。
二分查詢有序陣列
對於乙個有序字串陣列,用二分法查詢某一字串是否存在於該字串陣列中。函式原型為 bool binarysearch const vector array,const string target 注意這裡的有序指的是字典序,如字串陣列 a,ab,ac,bc,cd,d 就是有序字串陣列,而 a,b,ab ...
有序陣列的二分查詢
給出乙個有序陣列 公升序 以及指定的數值。返回指定數值在陣列中的下標 若不存在則返回 1 在傳入的公升序陣列arr中查詢是否有元素值與給定的number相等。param arr 有序陣列 公升序 param number 指定的數值 return 指定數值在該陣列中的下標值。返回 1表示不存在 st...
二分查詢(基於有序陣列)
採用一對平行的陣列,乙個儲存鍵乙個儲存值 實現的核心是rank 方法,它返回表中小於給定鍵的鍵的數量。二分查詢法 將被查詢的鍵和子陣列的中間鍵比較。如果被查詢的鍵小於中間鍵,就在左子陣列中繼續查詢,如果大於就在右子陣列中繼續查詢,否則中間鍵就是我們要找的鍵。實現 rank 採用了二分查詢法,rank...