這篇是我關於用Python實現50個經典算法代碼的第一篇文章,主要目的是在本身手寫一遍算法以後,在文章中對算法的細節進行總結來加以鞏固。算法
話很少說,讓咱們從最基本的排序算法開始吧數組
以下圖所示,插入排序的實現思路顧名思義,就是不斷地在一個已是有序的數組中,尋找合適位置並插入新元素。spa
具體實現步驟爲:code
首先咱們把整個數組拆分爲有序區間和未排序區間,有序區間在插入排序一開始只有一個元素,就是數組的第一個元素。blog
接在有序區間以後的一個元素就是準備插入的元素,在圖中就是標爲綠色的元素,在有序區間內尋找位置並插入。排序
其尋找邏輯爲:從後往前依次進行比較,若是待插入元素大於當前元素,則將待插入元素插入到當前元素的後一位,若是待插入元素小於當前元素,則將當前元素後移一位。不斷重複該過程直至到數組的最後一位ip
其實現的具體代碼爲:it
def insertion_sort(a): length = len(a) if length <=1: return for i in range(1,length): j = i-1 value = a[i] while j >=0: if a[j]<value: a[j+1] = value break else: a[j+1] = a[j] if j == 0: a[j] = value j -=1 print(a) return a
時間複雜計算爲:咱們須要將整個數組遍歷一遍,因此這一部分爲O(n),在每一次遍歷中都要執行一次插入操做,其時間複雜度爲O(n),因此總時間複雜度爲O(n2)io
選擇排序跟插入排序算法相似,都是將數組分爲有序區間和未排序區間,區別在於插入排序是將一個新元素插入到有序區間內,而選擇排序則是在未排序區間中找到最小元素,並交換到有序區間以後。class
實現代碼爲:
def selection_sort(a): length = len(a) if length <=1: return for i in range(0,length-1): min_value = a[i] min_index = i j = i+1 while j<length: if a[j] < min_value: min_value = a[j] min_index = j j += 1 a[i],a[min_index] = a[min_index],a[i] return a
時間複雜度計算:數組長度爲n,一共須要尋找n次最小值,每次尋找最小值都要遍歷未排序區間一次,其時間複雜度爲O(n),乘以n次爲O(n2)