天天看點

排序算法——插入排序及Python實作插入排序插入排序分析時間複雜度插入排序示範Python實作

插入排序

插入排序(英語:Insertion Sort)是一種簡單直覺的排序算法。它的工作原理是通過建構有序序列,對于未排序資料,在已排序序列中從後向前掃描,找到相應位置并插入。插入排序在實作上,在從後向前掃描過程中,需要反複把已排序元素逐漸向後挪位,為最新元素提供插入空間。

插入排序分析

排序算法——插入排序及Python實作插入排序插入排序分析時間複雜度插入排序示範Python實作
排序算法——插入排序及Python實作插入排序插入排序分析時間複雜度插入排序示範Python實作

時間複雜度

  • 最優時間複雜度:O(n) (升序排列,序列已經處于升序狀态)
  • 最壞時間複雜度:O( n 2 n^2 n2)
  • 穩定性:穩定

插入排序示範

排序算法——插入排序及Python實作插入排序插入排序分析時間複雜度插入排序示範Python實作

Python實作

# coding:utf-8


def insert_sort(alist):
    """插入排序"""
    n = len(alist)
    # 從右邊的無序序列中取出多少個元素執行這樣的過程
    # 從第二個位置,即下标為1的元素開始向前插入
    for j in range(1, n):
        # j = [1,2,3,...,n-1]
        # i 代表内層循環起始值
        i = j
        # 執行從右邊的無序序列中取出第一個元素,即i位置的元素,然後将其插入到前面的正确位置中
        # 從第i個元素開始向前比較,如果小于前一個元素,交換位置
        while i > 0:
            if alist[i] < alist[i-1]:
                alist[i], alist[i-1] = alist[i-1], alist[i]
                i -= 1
            else:
                break


# 測試
if __name__ == "__main__":
    li = [54, 26, 93, 17, 77, 31, 44, 55, 20]
    print(li)
    insert_sort(li)
    print(li)