一、插入排序 1、直接插入排序 基本思想:類似抓撲克牌,待排序元素在已排序的序列中從後往前遍歷,遇到小於他的元素向後移一位,直至遇到小於或等於他的元素,在其後插入即可 2、希爾排序(是對直接插入排序的一種改進) 二、交換排序 1、冒泡排序 基本思想:相鄰的兩個元素進行兩兩比較,如果出現逆序,則小的元 ...
一、插入排序
1、直接插入排序
基本思想:類似抓撲克牌,待排序元素在已排序的序列中從後往前遍歷,遇到小於他的元素向後移一位,直至遇到小於或等於他的元素,在其後插入即可
2、希爾排序(是對直接插入排序的一種改進)
二、交換排序
1、冒泡排序
基本思想:相鄰的兩個元素進行兩兩比較,如果出現逆序,則小的元素向前移動
代碼實現:
1 def bubble_sort(lst): 2 """冒泡排序""" 3 n = len(lst) 4 for i in range(n): 5 for j in range(1, n-i): 6 if not lst[j-1] > lst[j]: 7 # print("{}小於{},無需替換".format(lst[j-1], lst[j])) 8 continue 9 lst[j-1], lst[j] = lst[j], lst[j-1] 10 11 return lst
2、快速排序(是對冒泡排序的一種改進)
基本思想:找到一個基準元素,比其小的元素放置左邊,反之不小於他的元素放置右邊,由此分成左右兩個區間,對左右兩個區間進行遞歸,重覆以上操作,最終形成有序序列
代碼實現:
1 def quick_sort(lst): 2 """快速排序""" 3 n = len(lst) 4 if n <= 1: 5 return lst 6 baseline = lst[0] 7 left = [lst[i] for i in range(1, len(lst)) if lst[i] < baseline] 8 right = [lst[i] for i in range(1, len(lst)) if lst[i] >= baseline] 9 return quick_sort(left) + [baseline] + quick_sort(right)
三、選擇排序
1、直接選擇排序
基本思想:從待排序記錄中找到最小或最大的元素,放置起始位置,然後再從剩下的序列中找到最值,放置在已排序的序列末尾,直至待排序記錄為空
代碼實現:
1 def select_sort(lst): 2 """直接選擇排序""" 3 for i in range(len(lst)): 4 res = min(lst) 5 yield res 6 lst.remove(res)
2、堆排序
基本思想:堆是python中一種基本的數據結構,heapq[0]永遠是序列中最小的元素
代碼實現:
1 def select_sort(lst): 2 """堆排序""" 3 heapq.heapify(lst) 4 for i in range(len(lst)): 5 yield heapq.heappop(lst)
四、歸併排序
1、二路歸併排序
基本思想:先拆再合:帶有N個元素的待排序序列分成N個子序列 ,相鄰的序列進行兩兩合併,在合併的過程中,較小的元素放置左邊,較大的元素放置右邊
以上總結僅代表個人理解,可能存在不足,還請批評指正
只有永不遏止的奮鬥,才能使青春之花,即便是凋謝,也是壯麗地凋謝