二分法 原理和實現

2021-09-30 00:15:18 字數 1136 閱讀 5977

寫乙個函式 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...