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)
(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
# 測試
(find_element(nums,35)
(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...