插入排序算法
1.時間複雜度:
最優時間複雜度:O(n)
最壞時間複雜度:O(n2)spa
2.穩定性:穩定3d
3.插入排序舉例:
alist = [93, 54,77,31,44,55,226] j = 1,i = 1開始
當i = 1時,判斷54和93的大小關係(即 i=1 和 i= 0 位置的大小關係),此時54應該放在93以前的位置,即alist = [54,93, 77,31,44,55,226]
alist = [54,93, 77,31,44,55,226] j = 2,i = 2開始
當i = 2時,判斷77和93的大小關係(即 i=2 和 i= 1 位置的大小關係),此時77應該放在93以前的位置,即alist = [54,77,93 31,44,55,226]
當i = 1時,判斷77和54的大小關係(即 i=1 和 i= 0 位置的大小關係),此時不改變77和54的位置,即alist = [54,77,93 31,44,55,226]
alist = [54,77,93, 31,44,55,226] j = 3,i = 3開始
當 i = 3時,判斷31和93的大小關係(即 i=3 和 i= 2 位置的大小關係),此時31應該放在93以前的位置,即alist = [54,77,31,93, 44,55,226]
當 i = 2時,判斷31和77的大小關係(即 i=2 和 i= 1 位置的大小關係),此時31應該放在77以前的位置,即alist = [54,31,77,93, 44,55,226]
當 i = 1時,判斷31和54的大小關係(即 i=1 和 i= 0 位置的大小關係),此時31應該放在54以前的位置,即alist = [31,54,77,93, 44,55,226]
alist = [31,54,77,93, 44,55,226] j = 4,i = 4開始
當 i = 4時,判斷44和93的大小關係(即 i=4 和 i= 3 位置的大小關係),此時44應該放在93以前的位置,即alist = [31,54,77,44,93, 55,226]
當 i = 3時,判斷44和77的大小關係(即 i=3 和 i= 2 位置的大小關係),此時44應該放在77以前的位置,即alist = [31,54,44,77,93, 55,226]
當 i = 2時,判斷44和54的大小關係(即 i=2 和 i= 1 位置的大小關係),此時44應該放在54以前的位置,即alist = [31,44,54,77,93, 55,226]
當 i = 1時,判斷44和31的大小關係(即 i=1 和 i= 0 位置的大小關係),此時不改變44和31的位置,即alist = [31,44,54,77,93, 55,226]
alist = [31,44,54,77,93, 55,226] j = 5,i = 5開始
當 i = 5時,判斷55和93的大小關係(即 i=5 和 i= 4 位置的大小關係),此時55應該放在93以前的位置,即alist = [31,44,54,77,55,93, 226]
當 i = 4時,判斷55和77的大小關係(即 i=4 和 i= 3 位置的大小關係),此時55應該放在77以前的位置,即alist = [31,44,54,55,77,93, 226]
當 i = 3時,判斷55和54的大小關係(即 i=3 和 i= 2 位置的大小關係),此時不改變55和54的位置,即alist = [31,44,54,55,77,93, 226]
後續循環不須要進行了
alist = [31,44,54,55,77,93, 226] j = 6,i = 6開始
當 i = 6時,判斷226和93的大小關係(即 i=6 和 i= 5 位置的大小關係),此時不改變226和93的位置,即alist = [31,44,54,55,77,93, 226]
後續循環不須要進行了code
4.Python代碼實現:blog
1 #coding:utf-8 2 #insertion_sort:插入排序 3 #插入算法:一部分是排序好的,另外一部分是未排序的 4 #第一輪:將列表的位置0處的元素做爲初始的排序部分,其他的做爲未排序部分 5 #第二輪:將未排序部分的第一個元素與排序部分的元素進行比較替換,最終放置在排序部分應該在的位置 6 #以此類推,進行n-1輪。 7 8 def insertion_sort(alist): 9 """插入排序""" 10 n = len(alist) 11 #從右邊的無序序列中取出多少個元素執行這樣的過程 12 for j in range(1,n): 13 # j = [1,2,3,...,n-1] 14 # i 表明內層循環起始值 15 i = j 16 #內層循環表明的是執行從右邊的無需序列中取出第一個元素即i位置的元素,而後將其插入到前面序列的正確位置中 17 while i > 0: 18 if alist[i] < alist[i-1]: 19 alist[i-1],alist[i] = alist[i],alist[i-1] 20 i -= 1 21 else: 22 break 23 24 25 if __name__ == "__main__": 26 alist = [93,54,77,31,44,55,226] 27 print("插入排序以前的原始列表:") 28 print(alist) 29 insertion_sort(alist) 30 print("插入排序以後的列表:") 31 print(alist)
輸出結果:排序