常用排序演算法的Python實現
阿新 • • 發佈:2019-02-15
1、氣泡排序
def bubble_sort(L):
_len = len(L)
for i in range(_len-1, -1, -1): #索引i遞減
for j in range(i): #索引j遞增
if L[j] > L[j+1]: #若比下一個元素大,交換
L[j], L[j+1] = L[j+1], L[j]
return L
2、快速排序
def quick_sort(L): if len(L) < 2: #當序列中只有1個元素時,返回 return L base = L[0] #取序列的第一個元素作base left = [ i for i in L[1:] if i < base ] #小於base的進left序列 right = [ i for i in L[1:] if i > base ] #小於base的進right序列 return quick_sort(left) + [base] +quick_sort(right) #歸併左右序列
3、插入排序
def insert_sort(L):
_len = len(L)
for i in range(1, _len): #從第2個元素開始
for j in range(i): #L[i]與它左側的元素逐一比較,保證均比自己小
if L[i] < L[j]: #當遇到大於自己的元素
L.insert(j, L[i]) #插入該位置
L.pop(i+1) #將原位置元素刪除
return L
4、選擇排序
def select_sort(L): _len = len(L) for i in range(_len): #索引i遞增 min_index = i #最小元素的索引 for j in range(i+1, _len): #在i+1~_len間找最小元素 if L[j] < L[min_index]: min_index = j #更新最小元素索引 L[i], L[min_index] = L[min_index], L[i] #將最小元素放到當前範圍最左 return L
5、歸併排序
def merge(left, right): #組合子序列 result = [] #結果序列 while left and right: if left[0] >= right[0]: #按由小到大在result中排序 result.append(right.pop(0)) else: result.append(left.pop(0)) result.extend(left) result.extend(right) return result def merge_sort(L): if len(L) < 2: #序列中元素為1,返回 return L mid = len(L) // 2 #將序列一分為二 left = merge_sort(L[:mid]) #遞迴拆解子序列 right = merge_sort(L[mid:]) return merge(left, right) #呼叫merge組合子序列