資料結構 演算法 希爾排序

2021-09-14 04:53:59 字數 864 閱讀 2831

希爾排序過程:

希爾排序的基本思想是:將陣列列在乙個表中並對列分別進行插入排序,重複這過程,不過每次用更長的列(步長更長了,列數更少了)來進行。最後整個表就只有一列了。將陣列轉換至表是為了更好地理解這演算法,演算法本身還是使用陣列進行排序。

def shell_sort(alist):

"""希爾排序"""

n = len(alist)

# 初始步長

gap = n // 2

while gap > 0:

# 按步長進行插入排序 # 插入排序演算法 從gap處開始

for j in range(gap, n):

# 處理元素向前遍歷插入到相應的位置上

i = j

# 插入排序

while (i - gap) >= 0: # 另一組的下標索引

if alist[i] < alist[i - gap]:

alist[i], alist[i - gap] = alist[i - gap], alist[i]

i -= gap

else:

break

# 得到新的步長 縮短gap間隔

gap //= 2

# gap = gap // 2

if __name__ == '__main__':

li = [54, 26, 77, 17, 77, 31, 44, 55, 20]

print(li)

shell_sort(li)

print(li)

時間複雜度

最優時間複雜度:根據步長序列的不同而不同

最壞時間複雜度:o(n2)

穩定性:不穩定

資料結構和演算法 排序演算法 希爾排序

希爾排序 希爾排序 希爾排序就是插入排序的一種改進版本,演算法的步驟 把乙個序列不視為乙個整體,而是視為多個子串行,假設間隔是gap 4 alist 54,26,93,17,77,31,44,55,20 54,26,93,17,77,31,44,55,20 54 77 20 這是1 組,間隔是4,2...

資料結構與演算法 希爾排序

希爾排序又稱縮小增量排序,實質上是分組直接插入排序。為了方便理解,先不討論如何獲得合適的增量陣列和整個演算法的 1 修改直接插入排序的 實現增量為gap的直接插入排序。將陣列從start到end中間隔為gap的子串行進行直接插入排序 private static void straightinser...

資料結構演算法之希爾排序

希爾排序的最大間隔是利用公式 h h 3 1 當前h設定為1 減小間隔公式 h h 1 3 h 4 while h 0 array 0 2 array 2,23,34,1,12,4,15,67,23 第二次 i 5 temp array 5 4 j 5 while j 3 array 1 4 arr...