演算法導論 插入排序

2021-09-25 20:58:18 字數 1353 閱讀 7370

【演算法導論】插入排序

標籤(空格分隔):【演算法導論】

什麼是排序?

考慮對於給定輸入的某乙個陣列 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):

print

("排序前"

, 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

print

("排序後"

, 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 小的...