演算法 插入排序

2022-05-08 14:42:15 字數 1366 閱讀 7564

列表被分為有序區和無序區兩個部分。最初有序區只有乙個元素。

每次從無序區選擇乙個元素,插入到有序區的位置,直到無序區變空。

【就好比打牌,摸牌,手裡的牌是有序的,桌子上的牌是無序的,從桌子上最上面摸一張牌,插入到手裡的牌裡面】

**關鍵點:

圖一: 紅色有序區, 白色無序區

圖二: 從無序區拿出乙個值

圖三:

圖四: 插入到有序區

python**實現:

li = [1, 2, 3, 7, 5, 9, 4, 8, 1]

definsert_sort(li):

for i in range(1, len(li)): #

第乙個位置的值初識化為有序區,索引從1開始

temp = li[i] #

把無序區第乙個位置的值拿出來(新摸到的一張牌)

j = i - 1 #

有序區最後乙個位置的索引

while j >= 0 and temp < li[j]: #

兩個終止條件: 1.j<0,索引越界,說明temp是最小的

li[j + 1] = li[j] #

把有序區最後乙個位置的值往後移一格

j -= 1li[j + 1] =temp

#兩個終止條件: 1. j=-1,說明temp最小,放到最前面

#2. 一上來,無序區第乙個值就大於有序區最後乙個值

insert_sort(li)

print(li)

時間複雜度:o(n2)

空間複雜度:o(1)

優化空間:應用二分查詢來尋找插入點(並沒有什麼卵用)

注意while j >= 0 and temp < li[j]: 兩個條件的順序

布林運算的短路功能

1 > 2 and 3 < 4
python做了優化, 前面不滿足,後面就不判斷了

不用if寫乙個if語句

def

func():

print(11)

a = 1a

< 0 and

func()

a > 0 and

func()

#11

插入排序演算法

插入排序演算法 思想 把排序過程看作是序列單個有序擴充套件為整體有序的過程,即首先取序列第二個元素與第乙個元素比較,將其插入合適位置,再將第三個元素與前兩個元素比較,將其插入合適位置,如此進行,直到最後取第n個元素與前n 1個元素進行比較並將其插入合適位置。演算法 建立日期 2004 12 14 插...

演算法 插入排序

include include 插入排序 n 2為的效率。具體思想 將陣列分為兩部分,一部分是有序的,一部分為無序的 然後從無序中選取乙個數插入在有序的數中的恰當的位置,以此迭代,直到無序的數全部遍厲完畢 void insert sort int a,int n a j tmp break retu...

插入排序演算法

下面這段話摘自 一般來說,插入排序都採用in place在陣列上實現。具體演算法描述如下 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果該元素 已排序 大於新元素,將該元素移到下一位置 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置 將...