順序查詢從列表第乙個元素開始,順序進行搜尋,直到找到為止。
二分查詢
從有序列表的候選區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三人組:快速排序
importrandom
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)]
(li)
quick_sort(li, 0, len(li) - 1)
print(li)
更快的方法(空間複雜度-高)
defquick_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資料排序...