資料結構 希爾排序

2021-09-17 03:37:34 字數 1028 閱讀 1804

希爾排序。

終於在此刻將這個排序學完了。。這個排序講什麼的呢?

就是說,它對乙個序列,取了乙個gap的步長。然後呢,用gap將這個序列分成了很多組,然後就是每組進行插入排序(插入排序:將乙個序列從前往後走,每走一步,就將這個元素和它前面的所有元素比較交換位置。)。

下面上**:

def shell_sort(alist):

n = len(alist) # 找到整個序列的長度

gap = n // 2 # 首先選出整個序列的gap,取中間值

while gap > 0: # 這時候我們的gap需要進行遍歷,每次取半

for j in range(gap,n): # 從gap到n我們都要每個元素都要比較

i = j

while i > 0: # 這裡是為了給每個gap分組後的序列排序時準備的終止條件

if alist[i] < alist[i-gap]: # 如果後者比前者小,就要交換位置

alist[i],alist[i-gap] = alist[i-gap],alist[i] # 交換位置

i -= gap # 每次交換完位置之後,就要往前移動gap的間隔進行再次比較

else: # 如果當前位置的值比前者大,不需要移動,就直接結束這次判斷

break

gap = gap // 2 # 遍歷gap時候每次都取半

希爾排序

最優時間複雜度:根據選擇步長不同而不同

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

穩定性: 不穩定

資料結構 希爾排序!!!

希爾排序是將一組資料進行分組,再將分組的資料進行排序,這樣資料就會逐漸的趨向有序,當分組的個數為1的時候將整個陣列排序一遍,那麼整個陣列就排序好了。基本思想 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基...

資料結構 希爾排序

1 希爾排序是在直接插入排序的基礎上改良而來的,直接插入排序需要記錄基本有序的情況下才能變得很高效,希爾排序便是採取跳躍分割的策略,將相距 增量 的元素組成乙個子串行,這樣才能保證最後進行直接插入排序時的序列是基本有序的。希爾排序的時間複雜度是 2 希爾排序實現演算法 include include...

資料結構 希爾排序

希爾排序是donald shell於1959年提出來的一種排序演算法,它是第一批突破這個時間複雜度的演算法之一。大話資料結構對這個演算法的講解,我看得一知半解的,之後網上找了下資料,發現維基百科對這個演算法的講解非常不錯,特在此整理一波。希爾排序是基於插入排序的以下兩點性質而提出改進方法的 先上個維...