搜尋演算法 線性查詢 二分查詢

2021-10-09 06:34:23 字數 2447 閱讀 3711

最基本的查詢演算法是線性查詢,屬於無序查詢演算法。思路是從資料結構線形表的一端開始,順序掃瞄,依次將掃瞄到的結點關鍵字與給定值k

kk相比較,若相等則表示查詢成功;若掃瞄結束仍沒有找到關鍵字等於k的結點,表示查詢失敗。

平均時間複雜度:o(n

)o(n)

o(n)

import numpy as np

from time import

*a = np.linspace(1,

10000

,10000

)target_x =

8000

def

liner_search

(a, target_x)

:for i in

range(0

,len

(a))

:if a[i]

== target_x:

print

('元素在a中的索引為:{}'

.format

(i))

return i

return

-1

begin_time = time(

)result = liner_search(a, target_x)

end_time = time(

)run_time = end_time-begin_time

print

(, run_time)

元素在a中的索引為:

7999

二分查詢也稱折半查詢,是一種在有序陣列中查詢某一特定元素的搜尋演算法,要求資料必須採用順序儲存結構。

思路:1)搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過程結束;2)如果所要搜尋的元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中展開搜尋,並且同樣從中間元素開始比較。3)若在某一步驟陣列為空,則代表找不到。

這種搜尋演算法每一次比較都可以使搜尋範圍縮小一半。

平均時間複雜度:o

(log⁡2

n)

o(\log_2 n)

o(log2​n

)

import numpy as np

from time import

*import sys

sys.setrecursionlimit(

10000

)# 設定遞迴深度

a = np.linspace(1,

10000

,10000

)target_x =

8000

def

binary_search

(a, left, right, target_x)

:if right >=1:

mid =

int(left +

(right - left)/2

)# 剛好位於中間

if a[mid]

== target_x:

return mid

# 小於中間位置的元素,則比較左半邊的元素

elif a[mid]

> target_x:

return binary_search(a, left, mid-

1, target_x)

# 大於中間位置的元素,則比較右半邊的元素

elif a[mid]

< target_x:

return binary_search(a, mid+

1, right, target_x)

else

:print

('不存在該元素,搜尋失敗'

)return

-1

begin_time = time(

)result = binary_search(a,0,

len(a)-1

, target_x)

end_time = time(

)run_time = end_time-begin_time

print

('元素在a中的索引為:{}'

.format

(result)

)print

(, run_time)

元素在a中的索引為:

7999

[ps]這裡不清楚為什麼當target_x大於陣列中最大的元素的時候,會出現如下錯誤。

process finished with exit code -

1073741571

(0xc00000fd

)

後續將繼續學習其他的搜尋演算法

二分查詢搜尋演算法

二分查詢能解決從給定的一組有順序的數中查詢出某乙個數這類問題。它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。left 為序列開始 mid 為序列中間 right 為序列結束位置 value 為查詢的關鍵字 預設序列為公升序 思路就是先將序列中...

二分查詢 折半搜尋 演算法

折半搜尋又叫二分查詢也叫二分演算法,顧名思義 折半就是把有序陣列分成兩段 找乙個中間軸 跟你想要查詢的元素比較如果是中間軸數大於查詢數就從前半段進行如此步驟 直到找到查詢數,小於則從後半段依此。下邊這段 只是對有排序規則的,對無排序則用comparator自定義排序規則 如物件。折半查詢 針對有序陣...

搜尋演算法 順序查詢和二分查詢

學習 輕鬆學演算法 一順序查詢 給定乙個數列和乙個數key,找出第乙個與key相同的數的下標。原理 從數列開始乙個乙個進行比較,這個還是比較簡單的。package xxc.algorithm.ch04.sequentialsearch public class sequentialsearch 直接...