排序算法之插入排序

插入排序算法


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)

 

輸出結果:排序

相關文章
相關標籤/搜索