【演算法導論】插入排序
標籤(空格分隔):【演算法導論】
什麼是排序?
考慮對於給定輸入的某乙個陣列 a
=a = \
a=, 經過排序演算法,我們可以得到原始排列的乙個序列a
=a=\, a_2^,..., a_n^\}
a=, 其中ai′
+1′a_i^ < a_^
ai′
+1′
.什麼是插入排序?
對於陣列a[0], a[1], …, a[n-1]. 取0≤i
<
n0 \le i < n
0≤i<
n, 在已排序陣列a[0], a[1],…,a[i-1]後,將a[i]插入到a[0,…,i-1]中的合適位置上,產生排序好的陣列a[0,…i].
為直觀起見,我們用圖例介紹插入排序:對於陣列 a
=a = \
a=, 有
插入排序的**為:
def
insertion_sort
(a):
("排序前"
, a)
for i in
range(1
,len
(a))
:# 不從0開始是因為單個a[0]已有序
temp = a[i]
# 暫存 a[i],作為比較項
j = i # 將a[i]插入到a[0,...,i-1]中
while j >
0and a[j-1]
>temp:
a[j]
= a[j-1]
j -=
1 a[j]
= temp
("排序後"
, a)兩個測試例:
演算法分析:
時間複雜度:最好情況(陣列已有序):o(n
)o(n)
o(n)
; 最差情況(陣列逆序):o(n
2)o(n^2)
o(n2
)空間複雜度:o(1
)o(1)
o(1)
另外,當輸入規模較小時,相比於其他排序演算法,插入排序效能更優。
演算法導論 插入排序
introduction to algorithms second edition chapter2,insertion sort date 2014 9 14 include include include define max 50 typedef struct sortarr 直接插入排序 i...
演算法導論 插入排序
插入排序應該算是比較好理解的一種了,原理類似於我們打牌的時候,摸牌插入手中的情景。來看一下圖,立刻就明白了 我們將乙個陣列int a 12 看做一副撲克牌,假設陣列有12個數,那麼撲克牌也一共有十二張,放在一起開始 我們先抽一張拿到手上,這時候,我們不需要排序,因為不論哪一張先被我們抽上來,不論大小...
演算法導論 插入排序
對於只有乙個元素的陣列,本身為已序。對於兩個元素的a,認為 a0 為已序,a1為key 若key a0 則將key 放到a0後。若不是,後移a0 對於多個元素的陣列 考慮將key 插入到已序的 a0 aj a0 a1 a2.中,可以將key 與aj a0 逐個比較,並後移,直到遇到乙個比key 小的...