Python插入排序(2)

2022-07-22 08:12:09 字數 1566 閱讀 2598

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 ...