插入排序(英語:insertion sort)是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,在從後向前掃瞄過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。
插入排序分析
實現
'''
i = 1 , [1] 依次從後向前比較, alist[1]與alist[0]比較
i = 2 , [2,1] 依次從後向前比較, alist[1]與alist[0]比較 , alist[2]與alist[1]比較
i = 3 , [3,2,1] 依次從後向前比較, alist[1]與alist[0]比較 , alist[2]與alist[1]比較 , alist[3]與alist[2]比較
i = 4 , [4,3,2,1] 依次從後向前比較, alist[1]與alist[0]比較 , alist[2]與alist[1]比較 , alist[3]與alist[2]比較........
.i = n-1 , [n-1,n-2,n-3,...,1] ---> for j in range(i, 0, -1) , 依次從後向前比較......
時間複雜度:o(n2)
穩定性:穩定
優化演算法,資料剛好都是已排序時,最佳時間複雜度:o(n)
'''def insertionsort(alist):
'''插入排序'''
n = len(alist)
for i in range(1, n):
# 拿未排序的第乙個資料與已排序的資料依次從後面開始比較大小
for j in range(i, 0, -1):
# 如果比前面乙個數小,就交換位置
if alist[j] < alist[j-1]:
alist[j], alist[j-1] = alist[j-1], alist[j]
# 演算法優化
else:
break
if __name__ == '__main__':
alist = [3, 4, 6, 34, 1, 2, 43, 5, 8, 6, 56, 9, 7, 4]
print(alist)
insertion_sort = insertionsort(alist)
print(alist)
執行結果:
/home/longhui/desktop/資料結構與演算法/venv/bin/python /home/longhui/desktop/資料結構與演算法/venv/mycode/6_sorting_and_searching/insertion_sort.py
[3, 4, 6, 34, 1, 2, 43, 5, 8, 6, 56, 9, 7, 4]
[1, 2, 3, 4, 4, 5, 6, 6, 7, 8, 9, 34, 43, 56]
process finished with exit code 0
插入排序 python實現
以下是插入排序的python函式實現 def insert sort arr for j in range 1,len arr 從list第二個元素開始 key arr j 儲存將要進行插入排序的元素數值 index j 儲存將要進行插入排序的元素的索引 while index 0 and arr ...
Python實現插入排序
插入排序 insertion sort 是一種比較簡單直觀的排序演算法。插入排序的步驟 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素作為待插入物件,在已排序序列中從後向前掃瞄 如果該元素小於前乙個元素,則將兩者調換,再與前乙個元素比較 重複第三步,直到前乙個元素不大於待插元素 將新元素...
Python 實現插入排序
插入排序適合於部分有序序列和小規模的資料。其平均時間複雜度為 o n 2 空間複雜度為 o 1 並且為穩定排序。插入排序將待排序序列分為有序區 記為 s 區 和無序區 記為 r 區 以從小到大的順序為例,每次從 r 區彈出乙個元素 o,要將元素 o 插入到 s 區中恰當位置。從 s 區最右端開始,依...