常用的 查詢演算法與排序演算法

2022-08-03 03:30:15 字數 2843 閱讀 8067

順序查詢

從列表第乙個元素開始,順序進行搜尋,直到找到為止。

二分查詢

從有序列表的候選區data[0:n]開始,通過對待查詢的值與候選區中間值的比較,可以使候選區減少一半。

li = [1, 2, 3, 4, 5, 6, 7, 8, 9]

val = 5

defsearch(li, val):

low =0

high = len(li) - 1

while low <=high:

mid = (low + high) // 2

if val ==li[mid]:

return

mid

elif val high = mid + 1

else

: low = mid - 1

return'no

'print(search(li, val))

排序low b三人組:

氣泡排序

# 最好情況o(n) 平均情況o(n^2) 最壞情況o(n^2)
li = [1, 12, 4, 7, 88, 22, 4, 8, 23]

for i in range(len(li) - 1):

exchange =false

for j in (range(len(li) - i - 1)):

#前一項與後一項比大小,大的交換排到後邊去

if li[j] > li[j + 1]:

li[j], li[j + 1] = li[j + 1], li[j]

exchange =true

ifnot

exchange:

break

print(li)

選擇排序

li = [1, 12, 4, 7, 88, 22, 4, 8, 23]

for i in range(0, len(li) - 1):

mini =i

for j in

range(i, len(li)):

#選擇乙個最小的記錄

if li[j] mini =j

#將當前位置於最小的交換

li[i], li[mini] =li[mini], li[i]

print(li)

插入排序

li = [1, 12, 4, 7, 88, 22, 4, 8, 23]

for i in range(1, len(li)):

tem =li[i]

j = i - 1

#取乙個數,插入到比他小的數的位置的後邊,其他的數的下標向後移動

while j > 0 and li[j] >tem:

li[j + 1] =li[j]

j -= 1li[j + 1] =tem

print(li)

排序nb三人組:

快速排序

import

random

defquick_sort(li, left, right):

if left mid =partition(li, left, right)

#左邊排序

quick_sort(li, left, mid - 1)

#右邊排序

quick_sort(li, mid + 1, right)

#大小資料分開,返回下角標

defpartition(li, left, right):

tem =li[left]

while left while li[right] >= tem and left right -= 1li[left] =li[right]

while li[left] <= tem and left left += 1li[right] =li[left]

li[left] =tem

return

left

#減少遞迴深度[1000,999,....,0]

defrandom_partition(li, left, right):

i =random.randint(left, right)

li[i], li[left] =li[left], li[i]

return

partition(li, left, right)

if__name__ == '

__main__':

li = [random.randint(0, 10000) for i in range(1000)]

print

(li)

quick_sort(li, 0, len(li) - 1)

print(li)

更快的方法(空間複雜度-高)

def

quick_sort2(li):

if len(li) < 2:

return

li tmp =li[0]

left = [v for v in li[1:] if v <=tmp]

right = [v for v in li[1:] if v >tmp]

left =quick_sort2(left)

right =quick_sort2(right)

return left + [tmp] + right

堆排序

歸併排序

沒什麼人用的排序:

基數排序

希爾排序

桶排序

演算法筆記之常用查詢與排序

直接插入排序 一種最為簡單的排序方法。基本思想 第 i 趟排序將序列中的第 i 1 個元素 k i 1 插入到乙個已經按值有序的子串行中 k 0 k i 中的合適的位置,使得插入後的序列仍然保按值有序。詳細演算法 從小到大 void insertsort keytype k,int n 選擇排序 基...

演算法 常用排序和查詢

常見演算法中的排序和查詢 1.選擇排序 指定乙個和其他數比較 選擇排序 指定乙個和其他數比較 for int i 0 i 2.氣泡排序 相鄰兩個數比較 氣泡排序 相鄰兩個數比較 for int i 0 i 3.插入排序 指定乙個數和他左邊的數依次往左比較,直到不滿足條件為止 插入排序 指定乙個數和他...

排序演算法 查詢演算法

排序演算法 交換排序 選擇排序 歸併排序 基數排序 查詢演算法 動態查詢 雜湊表查詢 簡介 n個資料,從1到n乙個乙個插入進行排序。空間複雜度 o 1 時間複雜度 o n2 演算法穩定性 穩定演算法 簡介 取幾個增量,如5,2,1 最後乙個增量必須為1 然後從左到右5個5個的排序 如 1到5資料排序...