Python 希爾排序

2021-07-04 04:42:35 字數 824 閱讀 8119

# -*- 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[i+1],list[i+1+gap],list[i+1+2gap]...與list[i]比較

選擇小的與list[i]交換

'''for i in xrange(m):

index = i

j = i+1

while j < m:

if list[j] < list[index]:

index = j

j += gap

if index != j: # 若有元素比list[i]小,交換

list[index],list[i] = list[i],list[index]

print list

gap = gap / 2

return list

if __name__== '__main__':

list_0 = [4,1,9,13,34,26,10,7,4,3]

list_1 = shellsort(list_0)

演算法效能:

1. 演算法的平均時間複雜度是o(n**m),1

Python 希爾排序

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

Python 希爾排序

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

python 希爾排序

希爾排序,將相聚某個 增量 的記錄組成乙個子串行,這樣才能能保證在子串行內分別進行直接插入排序後得到 的結果是基本有序而不是區域性有序 def shellsort list increment len list len list 2 1 增量的選取有待進一步研究 增量序列的最後乙個增量必須是1 wh...