介紹一種新的排序演算法,插入排序。先想想一下在玩撲克牌時的動作,當剛開始發完牌時,每個人都需要整理手中的牌,那麼我們排序時,就需要從亂序中的牌中拿出一張牌,將這張牌和已經排好序的牌進行比較,從而放到正確的位置。以此類推,直到排好所有的牌。這是我寫的**。外迴圈的下標相當於是每次的有序列表(排好序)的最大下標,逐步增加乙個。比如,手中有5張牌,無序。首先從這五張牌中隨便拿出一張,因為最開始都沒有序,所以就直接放(當然實際情況是把最左邊的一張牌當做有序的,從四張牌中隨便選出一張進行比較)。然後從四張牌中隨便拿出一張,和已經排好序的一張牌進行比較,從而形成兩張牌的有序列。之後再從三張牌中隨便選取一張,和有序的兩張牌進行比較排序。以此類推。
def insert_sort(alist):
for i in range(len(alist) - 1):
temp = alist[i+1]
for j in range(i, -1, -1):
if alist[j] >= temp:
alist[j+1] = alist[j]
# 找到小於當前元素的位置,退出迴圈
else:
alist[j+1] = temp
break
# 迴圈正常結束,即已排好序的子集中都比當前元素大,所以需要最後加一步替換。
else:
alist[j] = temp
# print(alist)
# alist = [2,7,5,84,10,1,3]
# alist = [1,1,2,1,3,5,4,2,1,3,10,6]
alist = [2,1,1,1,1,1,1,1,1]
insert_sort(alist)
print(alist)
對比一下教程中的**。(比較簡潔),它的外層迴圈是剩餘無序的列表的下標的最小下標。
def insert_sort(alist):
for index in range(1, len(alist)):
current_value = alist[index] # 當前插入項
position = index # 迴圈比較時的下標
while position > 0 and alist[position-1] > current_value:
alist[position] = alist[position - 1]
position -= 1
# 退出迴圈,可能是找到了位置,也可能是都比當前元素大
alist[position] = current_value
alist = [2,7,5,84,10,1,3]
# alist = [2,1,1,1,1,1,1,1,1]
insert_sort(alist)
print(alist)
Python排序演算法之插入排序
插入排序的工作原理是,對於每個未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。步驟 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果被掃瞄的元素 已排序 大於新元素,將該元素後移一位 重複步驟3,直到找到已排序的元素小於或者等於新元素的...
排序演算法之插入排序
排序演算法之插入排序 1 插入排序的思想 假設在乙個有序序列中 e 0 e i 1 這i 個元素已經排好序,則當要將第 i 1個元素 e 插入該序列時,只需將第 i 1個元素與從 e 0 開始到e i 1 元素進行比較,當發現第 j個元素 e j 在序列中應在 e 前,且 e j 1 應在e 後時,...
排序演算法之插入排序
排序演算法之插入排序 1 插入排序的思想 假設在乙個有序序列中 e 0 e i 1 這i 個元素已經排好序,則當要將第 i 1個元素 e 插入該序列時,只需將第 i 1個元素與從 e 0 開始到e i 1 元素進行比較,當發現第 j個元素 e j 在序列中應在 e 前,且 e j 1 應在e 後時,...