python**:
"""插入排序(2)希爾排序、shell排序
1)確定初始步長
2)按步長將待排序的數進行分組
3)每個分組採用直接插入排序
不斷縮小步長,當步長縮小為1時,排序結束。
步長的縮小規律如下:
n / 2 = n1
n1 / 2 = n2
n2 / 2 = n3
....
當n變成1時,被分為1組,演算法終止
"""#
希爾排序
defshellsort(lst):
s = len(lst)//2 #
初始步長,地板除獲取整數部分
while s >= 1:
for i in range(0, s): #
步長s,即可以分為s個陣列
sublist =
j =i
while j#
生成各分組的數
sublist.insert(0, lst[j])
j = j+s
sublist = insertsort(sublist) #
各分組直接插入排序
j =i
for k in range(len(sublist)): #
對各分組的數排序
lst[j] =sublist[k]
j = j+s
s = s//2 #
縮小步長
print("
希爾排序後:%s
" %lst)
#直接插入排序
definsertsort(lst):
for i in range(1,len(lst)): #
未排序的陣列#次
for j in range(i): #
已排序的陣列(初始假設第乙個數已排序)
if lst[i] <=lst[j]:
lst.insert(j, lst[i])
lst.pop(i+1)
break
return
lstif
__name__ == "
__main__":
lst = [3, 6, 9, 1, 4, 7, 2, 8, 5, 0]
print("
排序前: %s\r\n
" %lst)
shellsort(lst)
print("
\r\n排序後: %s
" % lst)
輸出結果:
e:\python\algorithm>python3 insertsort2.py排序前: [3, 6, 9, 1, 4, 7, 2, 8, 5, 0]
希爾排序後:[3, 2, 8, 1, 0, 7, 6, 9, 5, 4]
希爾排序後:[0, 1, 3, 2, 5, 4, 6, 7, 8, 9]
希爾排序後:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
排序後: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
*****結束*****
排序 2 插入排序
插入排序 1.想象桌子上有一堆撲克牌,左手中只有一張,數值是2,然後從桌子上拿起一張,數值是5,將這張撲克牌的和左手上的撲克牌進行比較,把較小的哪乙個放到左邊,於是左手上的撲克牌變成兩張,排列從左到右分別是 2,5。2.然後再從桌子上拿起一張牌3,此時左手上已經有兩張牌並且已經排好順序,左邊的小右邊...
python 插入排序
coding utf 8 def insertsort list list 4,1,9,13,34,26,10,7,4 m len list 元素個數 for i in range m 對每乙個元素 min i 當前元素索引 for j in range i 1,m 遍歷後面的所有元素,尋找最小的值...
Python 插入排序
本博文示例為自己指定一定範圍,生成指定個數的隨機數,再對生成的隨機數進行排序,並記錄排序所花時間。生成指定範圍 指定個數隨機數 import random def generate point range gene size,min val,max val num list i 0 while i ...