演算法導論 插入排序

2021-08-25 18:40:58 字數 1584 閱讀 2135

對於只有乙個元素的陣列,本身為已序。

對於兩個元素的a, 認為 a0 為已序,a1為key ,若key > a0 則將key 放到a0後。若不是,後移a0

對於多個元素的陣列:

考慮將key 插入到已序的 a0-aj(a0 <= a1 < a2...) 中,可以將key 與aj - a0 逐個比較,並後移,直到遇到乙個比key 小的ak 。將key 放到ak以後就可以了。

**也很簡單。

#/usr/bin/env python

importrandom

definsertion_sort(a):

'''demostration for insertion algorithm

a is the list to be sorted

'''i=1

whilei < len(a):

key=a[i]

j = int(i -1)

whilej >= 0anda[j] > key:

a[j+1] = a[j]

print'a[', j ,']->a[',j+1,']'

printa

j = j-1

a[j+1] = key

print'key -> a[', j+1, ']'

printa

i = i+1

returna

if__name__ == '__main__':

a=b=list()

foriiniinrange(5):

#choose 5random numbers in (1...1000) as a sort list

ainsertion_sort(a)

printsorted(a)

執行的示例:

c:/users/ly/i2a>python insertion_sort.py

[45, 3, 113, 111, 346]

a[ 0 ]->a[ 1 ]

[45, 45, 113, 111, 346]

key -> a[ 0 ]

[3, 45, 113, 111, 346]

key -> a[ 2 ]

[3, 45, 113, 111, 346]

a[ 2 ]->a[ 3 ]

[3, 45, 113, 113, 346]

key -> a[ 2 ]

[3, 45, 111, 113, 346]

key -> a[ 4 ]

[3, 45, 111, 113, 346]

[3, 45, 111, 113, 346]

插入排序使用了很重要的思想:對於已知n個數的解決方案,想辦法推廣到n+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 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 ...