Python希爾排序及優化

2021-09-26 09:06:39 字數 1934 閱讀 4129

希爾排序

背景:插入排序在小規模資料、資料基本有序時效率較高

思想:將序列分為若干子串行進行插入排序,待序列基本有序時,對整體進行插入排序

分析

將序列以步長分組,組內資料進行插入排序;

步長逐漸減小,執行上一步,直至步長為1;

對整體進行插入排序(步長為1)。

def

shell_sort

(alist)

:'''希爾排序'''

n =len(alist)

gap = n //

2# 初始步長

while gap >0:

# 按步長進行插入排序

for i in

range

(gap, n)

: j = i

while j >= gap and alist[j-gap]

> alist[j]

:# 插入排序

alist[j - gap]

, alist[j]

= alist[j]

, alist[j-gap]

j -= gap

gap = gap //

2# 更新步長

alist =[3

,44,38

,5,47

,15,36

,26,27

,2,46

,4,19

,50,48

]shell_sort(alist)

print

(alist)

[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
希爾排序優化
def

shell_sort2

(alist)

:'''希爾排序優化'''

n =len(alist)

gap = n //

2while gap >0:

for i in

range

(gap, n)

: j = i

while j >= gap:

if alist[j - gap]

> alist[j]

: alist[j - gap]

, alist[j]

= alist[j]

, alist[j - gap]

j -= gap

else

:# 當前數字大於等於前乙個步長位置的數字,則不再進行比較

break

gap = gap //

2alist2 =[3

,44,38

,5,47

,15,36

,26,27

,2,46

,4,19

,50,48

]shell_sort(alist2)

print

(alist2)

[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
總結:

最優時間複雜度

最壞時間複雜度

平均時間複雜度

空間複雜度

穩定性o(n

)o(n)

o(n)

o (n

2)

o(n^2)

o(n2)o(n

1.3)

o(n^)

o(n1.3)o(

1)

o(1)

o(1)

不穩定

希爾排序 原理及python實現

希爾排序的實質就是分組插入排序,該方法又稱縮小增量排序,因dl shell於1959年提出而得名。希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。希爾排序是基於插入排序的以下兩點性質而提出改進方法的 插入排序在對幾乎已經排好序的資料操作時,效率高,即可...

希爾排序法優化

希爾排序法的 實現 package main import fmt math rand time func main start time.now shellsort list end time.now dur end.sub start fmt.println dur 顯示消耗的時間 希爾排序函式...

Python 希爾排序

coding utf 8 希爾排序 def shellsort list list 4,1,9,13,34,26,10,7,4,3 m len list 元素數目 gap m 2 gap 5,2,1.while gap 0 print gap 列表中的list i 按間隔gap從列表中取元素list...