python二分查詢

2021-10-10 21:44:29 字數 1478 閱讀 6112

python二分查詢

# 查詢資料

import random

# nums = [random.randint(1,101) for x in range(10)]

nums =[27

,19,74

,67,25

,89,34

,3,93

,95]print

(nums)

print

(nums.index(3)

)# print(nums.index(5))

# 問題1 當查詢 不存在的資料會報錯

# 解決問題:

deffind_element

(nums, ele)

:for item in

enumerate

(nums)

:if ele == item[1]

:return item[0]

else

:return-1

# 測試

print

(find_element(nums,35)

)print

(find_element(nums,5)

)# 問題2 查詢效率太低

# 如果將資料放大100倍,在1000個資料中查詢資料,那麼平均每個資料的查詢比較次數是 500次

# 二分查詢法

defbinary_search

(nums, ele)

:# 如果不在列表中不需要查詢

if ele not

in nums:

return-1

# 左邊界

start =

0# 右邊界

stop =

len(nums)-1

# 左邊大於右邊才可以查詢

while start <= stop:

# 確定中值

mid =

(start + stop)//2

# 判斷,改變左

if ele > nums[mid]

: start = mid +

1# 判斷改變右

elif ele < nums[mid]

: stop = mid -

1# 找到

else

:return mid

# 二分查詢必須基於有須資料,所以對資料進行排序

Python二分查詢

二分查詢又稱折半查詢,首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成...

python 二分查詢

搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過程結束 如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。這種搜尋演算法每一次比較都使搜尋範圍縮小一半 param array ...

二分查詢(Python)

演算法介紹 二分查詢要求陣列為有序排列,每次取中間的數與target進行比較,若相等,則查詢成功 若中間數較大,則在前一部分查詢,反之,在後一部分查詢。其時間複雜度為o logn 演算法實現def binarysearch nums,target if not nums return false s...