十種常見排序算法能夠分爲兩大類:python
穩定: 若是a本來在b前面,而a=b,排序以後a仍然在b的前面。
不穩定: 若是a本來在b的前面,而a=b,排序以後 a 可能會出如今 b 的後面。算法
時間複雜度: 對排序數據的總的操做次數。反映當n變化時,操做次數呈現什麼規律。
空間複雜度: 是指算法在計算機內執行時所需存儲空間的度量,它也是數據規模n的函數。數組
冒泡排序是一種簡單的排序算法。它重複地走訪過要排序的數列,一次比較兩個元素,若是它們的順序錯誤就把它們交換過來。走訪數列的工做是重複地進行直到沒有再須要交換,也就是說該數列已經排序完成。這個算法的名字由來是由於越小的元素會經由交換慢慢「浮」到數列的頂端。函數
def bubble_sort(L): i = 0 flag = True length = len(L) while i < length and flag: j = length - 1 flag = False while j > i: if L[j - 1] > L[j]: L[j - 1], L[j] = L[j], L[j - 1] flag = True j = j - 1 i = i + 1
選擇排序(Selection-sort)是一種簡單直觀的排序算法。它的工做原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,而後,再從剩餘未排序元素中繼續尋找最小(大)元素,而後放到已排序序列的末尾。以此類推,直到全部元素均排序完畢。code
選擇排序是表現最穩定的排序算法之一,由於不管什麼數據進去都是O(n2)的時間複雜度,因此用到它的時候,數據規模越小越好。惟一的好處可能就是不佔用額外的內存空間了吧。理論上講,選擇排序可能也是平時排序通常人想到的最多的排序方法了吧。blog
n個記錄的直接選擇排序可通過n-1趟直接選擇排序獲得有序結果。具體算法描述以下:排序
def selection_sort(L): i = 0 length = len(L) while i < length - 1: min = i j = i + 1 while j < len(L): if L[min] > L[j]: min = j j = j + 1 if i != min: L[i], L[min] = L[min], L[i] i = i + 1
插入排序(Insertion-Sort)的算法描述是一種簡單直觀的排序算法。它的工做原理是經過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。內存
通常來講,插入排序都採用in-place在數組上實現。具體算法描述以下:io
def insertion_sort(L): for i in range(1, len(L)): # 若下標爲i的元素小於下標爲i-1的元素,則將下標爲i的元素放到合適位置 if L[i] < L[i - 1]: tmp = L[i] j = i - 1 # 尋找a[i]的合適位置,並將a[i-1]至a[i]新位置的元素依次後移 while j >= 0 and tmp < L[j]: L[j + 1] = L[j] j = j - 1 # 將a[i]放到新位置 L[j + 1] = tmp