lst = [4, 3, 6, 9, 2, 1]
1、氣泡排序: 依次把最大的數字往後移動
def bubble_sort(lst):
for i in range(len(lst) - 1):
for j in range(len(lst) - 1 - i):
if lst[j + 1] < lst[j]:
lst[j + 1], lst[j] = lst[j], lst[j + 1]
return lst
print(bubble_sort(lst))
2、選擇排序: 把最小的元素放到最前面
def select_sort(lst):
for i in range(len(lst) - 1):
minindex = i
for j in range(i + 1, len(lst)):
if lst[j] < lst[minindex]:
minindex = j
lst[i], lst[minindex] = lst[minindex], lst[i]
return lst
print(select_sort(lst))
3、 插入排序:把需要插入的數字插入到已經排好序的正確位置。
def insert_sort(lst):
for i in range(len(lst) - 1):
cur, preindex = lst[i + 1], i
while preindex >= 0 and cur < lst[preindex]:
lst[preindex + 1] = lst[preindex]
preindex -= 1
lst[preindex + 1] = cur
return lst
print(insert_sort(lst))
4、希爾排序:一種更高效的插入排序,它與插入排序的不同之處在於,它會優先比較距離較遠的元素。
def shell_sort(lst):
l = len(lst)
gap = 1
while gap < l // 3:
gap = gap * 3 + 1
while gap > 0:
for i in range(gap, len(lst)):
cur, preindex = lst[i], i - gap
while preindex >= 0 and cur < lst[preindex]:
lst[preindex + gap] = lst[preindex]
preindex -= gap
lst[preindex + gap] = cur
gap //= 3
return lst
print(shell_sort(lst))
5、計數排序:開闢乙個新的空間,然後把它的陣列值當做鍵,陣列中的元素為該值出現的次數。
def counter_sort(lst):
bucket = [0] * (max(lst) + 1)
for l in lst:
bucket[l] += 1
i = 0
for j in range(len(bucket)):
while bucket[j] > 0:
bucket[j] -= 1
lst[i] = j
i += 1
return lst
print(counter_sort(lst))
6、 快速排序:取乙個中心點,把比它大的放一邊,小的放另一邊
def quick_sort(lst):
if len(lst) <= 1:
return lst
p = lst[0]
left = [lst[i] for i in range(1, len(lst)) if lst[i] < p]
right = [lst[i] for i in range(1, len(lst)) if lst[i] >= p]
return quick_sort(left) + [p] + quick_sort(right)
print(quick_sort(lst))
7、 歸併排序:同時從兩個陣列中取值,然後合併到乙個新的陣列中。
def merge_sort(lst):
if len(lst) <= 1:
return lst
def merge(left, right):
res =
i = j = 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
i += 1
else:
j += 1
return res + left[i:] + right[j:]
mid = len(lst) // 2
left = merge_sort(lst[:mid])
right = merge_sort(lst[mid:])
return merge(left, right)
print(merge_sort(lst))
8、二分查詢:取陣列中間的值和查詢的值作比較,從而判斷需要查詢的元素在中間值的哪個方位。
def binary_search(lst,left,right, num):
if right num:
right = mid - 1
else:
return mid
return binary_search(lst,left,right,num)
print(binary_search(lst, 1,len(lst),11))
參考: 排序演算法Python
廢話不說直接看 計數排序 def countsort datalist 最終排好序的陣列 b 0 len datalist 計算用來儲存計數的陣列c的長度 maxnum max datalist minnum min datalist clength maxnum minnum 1 c 0 clen...
排序演算法 python
author xcy 參考別人,盡量自己寫了 命名規則不太好,不建議用list命名,但不好改了。寫的過程中遇到的問題都寫在注釋中 以下方法都在pycharm中除錯過,python3.7,但測試用例不多,難免有錯誤望批評指正 剛發現shell排序 有問題,網上的部落格都是照搬的啊,錯的也搬。還有歸併和...
Python 排序演算法
python 排序演算法 持續更新ing 內建排序 氣泡排序 0 n 2 插入排序 選擇排序 希爾排序 堆排排序 快排排序 歸併排序 呼叫方法預設排序 a 9,5,8,7,4,3,1,6,2,0 a.sort print a 呼叫方法預設排序 a 9,5,8,7,4,3,1,6,2,0 b sort...