初學python 希爾排序 ShellSort

2021-09-25 22:21:34 字數 1246 閱讀 1012

# /usr/bin/python

# -*- coding:utf-8 -*-

sample = [3, 7, 15, 6, 4, 2, 8]

l = len(sample)

while true:

l = l/2

k = 0

#將序列分成l個子序列

for k in range(0, l):

i = k + l

while i < len(sample):

j = i

while j > k:

if sample[j] < sample[j - l]:

temp = sample[j - 1]

sample[j - 1] = sample[j]

sample[j] = temp

else:

break

j = j - l

i = i + l

if l == 1:

break

最外層for迴圈表示序列被分為l個子序列,每個子串行都需要進行單獨排序;

從第14行while開始,內部都是插入排序內容;

第14行while表示每個子串行有m個元素,根據插入排序演算法:

第一次,第二個元素先比較

第二次,第三個元素和前面元素比較……

第m-1次,第m個元素和前面元素比較

如**,l = l/2,每個子串行有2個元素,第二元素比較,i 第二次累加,即跳出while;l = l/4,每個子串行有4個元素,後面3個元素比較後,i 第四次累加,即跳出迴圈

while i < len(sample):

......

i = i + l

第二個while迴圈,i 不斷累加,將每次累加後的初始值賦給 j ,第一次累加,第二個元素和前面元素比較;第二次累加,第三個元素和前面元素比較,j 最多累減兩次,剛好第三個元素最多比較兩次;第三次累加,第四個元素和前面元素比較。。。

j = i

while j > k:

if sample[j] < sample[j - l]:

temp = sample[j - 1]

sample[j - 1] = sample[j]

sample[j] = temp

else:

break

j = j - l

i = i + l

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

Python 希爾排序

希爾排序也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本,希爾排序的核心思想是 先將陣列分割成若干個子串行,分別進行直接插入排序,然後一次縮減增量再進行排序,直至增量為零,然後對全體進行一次直接插入排序。增量也叫分組步長,第一次為len array 2 第二次為 len array 2 ...

Python 希爾排序

希爾排序的基本思想是 將陣列列在乙個表中並對列分別進行插入排序,重複這過程,不過每次用更長的列來進行。最後整個表就只有一列了。將陣列轉換至表是為了更好的理解這演算法,演算法本身還是使用陣列進行排序。例如,假設有這樣一組數 13,14,94,33,82,25,59,94,65,23,45,27,73,...