文章目錄
- 1. 直接插入排序
- 2. 希爾排序
- 3. 效能比較
1. 直接插入排序
插入排序演算法思路是:
假定這個數組的序是排好的,然後從頭往後,如果有數比當前外層元素的值大,則將這個數的位置往後挪,直到當前外層元素的值大於或等於它前面的位置為止.這具演算法在排完前k個數之後,可以保證a[1…k]是局部有序的,保證了插入過程的正確性.
def insert_sort(data):
for i in range(1, len(data)):
temp = data[i] #data[i] is to insert
j = i - 1
while j >= 0 and temp < data[j]:
data[j + 1] = data[j]
j = j - 1
if j <> i - 1:
data[j + 1] = temp #insert temp
2. 希爾排序
希爾排序(Shell Sort)是插入排序的一種。因D.L.Shell於1959年提出而得名。希爾排序基本思想是:
先取一個小於n的整數d1作為第一個增量,把檔案的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同一個組中。先在各組內進行直接插入排序;然後,取第二個增量d2<d1重複上述的分組和排序,直至所取的增量dt=1(dt< dt-l<…<d2<d1),即所有記錄放在同一組中進行直接插入排序為止。
def shell_sort(data, n = None):
if n == None:
n = len(data) / 2
if n % 2 == 0:
n = n + 1
for i in range(0, n):
newdata = data[i:len(data):n]
insert_sort(newdata)
data[i:len(data):n] = newdata
if n <> 1:
d = n / 2
if d % 2 == 0:
d = d + 1
shell_sort(data, d)
3. 效能比較
對2000個隨機數進行排序,比較直接插入排序、希爾排序、快速排序、冒泡排序的效能,結果如下 :
shell_sort 0:00:00.110000
insert_sort 0:00:01.391000
quick_sort 0:00:00.047000
bubble_sort 0:00:03.438000
效能排名如下:
快速排序 > 希爾排序 > 直接插入排序 > 冒泡排序
Python 天天美味系列(總)
Python 天天美味(29) - 調用VC++的動態連結程式庫(DLL)
Python 天天美味(30) - python資料結構與演算法之快速排序
Python 天天美味(31) - python資料結構與演算法之插入排序
Python 天天美味(32) - python資料結構與演算法之堆排序
Python 天天美味(33) - 五分鐘理解元類(Metaclasses)[轉]
...