列表被分為有序區和無序區兩個部分。最初有序區只有乙個元素。
每次從無序區選擇乙個元素,插入到有序區的位置,直到無序區變空。
【就好比打牌,摸牌,手裡的牌是有序的,桌子上的牌是無序的,從桌子上最上面摸一張牌,插入到手裡的牌裡面】
**關鍵點:
圖一: 紅色有序區, 白色無序區
圖二: 從無序區拿出乙個值
圖三:
圖四: 插入到有序區
python**實現:
li = [1, 2, 3, 7, 5, 9, 4, 8, 1]時間複雜度:o(n2)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(1)
優化空間:應用二分查詢來尋找插入點(並沒有什麼卵用)
注意while j >= 0 and temp < li[j]: 兩個條件的順序
布林運算的短路功能
1 > 2 and 3 < 4python做了優化, 前面不滿足,後面就不判斷了
不用if寫乙個if語句
deffunc():
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,直到找到已排序的元素小於或者等於新元素的位置 將...