python二分查詢演算法模板

2021-08-20 16:11:58 字數 723 閱讀 5140

這個演算法可以查詢含重複元素的列表中序號靠前或者序號靠後的數字

def binarysearch(alist, item):

""":param alist: 排好序的列表

:param item: 查詢元素

:return: 排好序列表序號靠前的元素

"""if len(alist) == 0:

return -1

left, right = 0, len(alist) - 1

while left + 1 < right:

mid = left + (right - left) // 2

if alist[mid] == item:

right = mid

elif alist[mid] < item:

left = mid

elif alist[mid] > item:

right = mid

if alist[left] == item:

return left

if alist[right] == item:

return right

return -1

if __name__ == '__main__':

a = [1,2,2,4,5,6,7,8,9,10]

b = binarysearch(a, 2)

print(b)

Python演算法 二分查詢

二分查詢 binary search 也被稱為折半查詢,是在乙個有序陣列中查詢特定元素位置的查詢演算法。二分查詢要求查詢序列必須採用順序儲存,且表中元素按關鍵字有序排列。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成...

Python 二分查詢演算法

二分前提是有序,否則不可以二分 二分查詢演算法的是時間複雜度o log n 函式可以分2類 bisect系,用於查詢index insort系,用於實際插入 預設重複時從右邊插入import bisect lst 37 88,20 50,30 65,41 50 newlst sorted lst 公...

python二分查詢演算法

楔子 如果有這樣乙個列表,讓你從這個列表中找到66的位置,你要怎麼做?l 2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88 你說,so easy!l.index 66 我們之所以用index方法可以找到,是...