Python排序算法之插入排序

實際上,我們在對撲克牌進行排序時就已經使用了插入排序算法。回想一下玩撲克牌時,是怎麼進行排序的(這裏是升序爲例子)。
1.拿到一副順序雜亂的撲克牌(類比亂序的列表lst);
2.以最左邊的撲克牌爲基準(列表中索引爲0的元素),與之相鄰的撲克牌與最左邊的牌進行大小比較(列表中索引爲0+1的元素);
3.如果右邊的牌更小,則它應該插入到左邊牌的左邊( lst[0]=lst[1] )
4.如果右邊的牌更大,說明無須插入,則進行下一張牌的比較。
在這裏插入圖片描述
這裏,可以將算法概述爲:

  • 以lst[0]爲比較基準,每一次比較產生的有序序列,歸爲有序序列
  • 有序序列之外的序列爲無序序列,算法的目的就是從遍歷無序序列的每個元素,並插入到有序序列中合適的地方。
  • 因此,算法一共兩步:比較大小,然後選擇插入的位置

下面看一下算法:

lst = [5,2,4,6,1,3]
for i in range(1,len(lst)):
	key = lst[i] # 每次從無序序列中抽取的比較值
	j = i - 1 # 比較基準,lst[j]爲有序序列中,需要比較的基準元素
	while j >=0 and lst[j] > key: # 如果key需要插入,
		lst[j+1] = lst[j] # 則有序序列的元素位置需要往前挪動1
		j -= 1  # 有序序列逐個比較,直到全部比較完畢。最壞情況下,元素耗盡時,j=-1
	lst[j+1] = key # key插入到此處

插入排序的算法複雜度:因爲套了兩層循環,因此時間複雜度爲O(n^2)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章