對於只有乙個元素的陣列,本身為已序。
對於兩個元素的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 ...