排序演算法之插入排序Python

2021-10-24 04:43:32 字數 1459 閱讀 5936

介紹一種新的排序演算法,插入排序。先想想一下在玩撲克牌時的動作,當剛開始發完牌時,每個人都需要整理手中的牌,那麼我們排序時,就需要從亂序中的牌中拿出一張牌,將這張牌和已經排好序的牌進行比較,從而放到正確的位置。以此類推,直到排好所有的牌。

比如,手中有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 後時,...