用Python實現插入排序和選擇排序


這篇是我關於用Python實現50個經典算法代碼的第一篇文章,主要目的是在本身手寫一遍算法以後,在文章中對算法的細節進行總結來加以鞏固。算法

話很少說,讓咱們從最基本的排序算法開始吧數組

插入排序

以下圖所示,插入排序的實現思路顧名思義,就是不斷地在一個已是有序的數組中,尋找合適位置並插入新元素spa

clipboard.png

具體實現步驟爲: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

clipboard.png

實現代碼爲:

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)

相關文章
相關標籤/搜索