寫乙個函式 binaryseach,在包含 size 個元素的、從小到大排序的 int 陣列 a 裡查詢元素 p,如果找到,則返回元素下標,如果找不到,則返回-1。要求複雜度 o(log(n))
#include
using namespace std;
intbinaryseach
(int a,
int size,
int p)
return-1
;//找不到
}int
main()
;int len =
sizeof
(a)/
sizeof
(a[0])
; cout <<
binaryseach
(a, len,8)
}
寫乙個函式 lowerbound,在包含 size 個元素的、從小到大排序的 int 陣列 a 裡查詢比給定整數 p 小的,下標最大的元素。找到則返回其下標,找不到則返回-1
#include
using namespace std;
intlowerbound
(int a,
int size,
int p)
}return lastpos;
}int
main()
;int len =
sizeof
(a)/
sizeof
(a[0])
; cout <<
lowerbound
(a, len,8)
<< endl;
return0;
}
此題,看到陣列是從小到大排列的,就應該想到二分法。每次將陣列分一半,如果中間元素大於等於 p,繼續在左側區間尋找,如果中間元素小於p,記錄這個位置,繼續在右側區間尋找。當區間長度變為0時,該位置就是 p 左側的第乙個元素(即下標最大的元素)
有乙個細節需要注意:在取中間元素的時候,最好使用 int mid = l+(r-l)/2; 如果使用 int mid = (l+r)/2; 在計算 (l+r) 時可能結果過大,超過了 int 的表示範圍,溢位了
C 二分法查詢,遞迴二分法
用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...
python二分法查詢 Python 二分法查詢
二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...
二分法python實現
聚會遊戲,乙個人想乙個數,其他人來猜,然後告訴你猜大了還是小了,直到猜到這個數。二分法和猜數遊戲類似,只不過猜的時候一定猜最中間的那個數,折半查詢所需內容,就陣列來說,陣列越長,梯度下降越快,二分查詢優勢越明顯。python 如下 1 defbinary search list,item 2 low...