常用排序演算法 希爾排序

2021-08-29 20:29:41 字數 749 閱讀 9733

希爾排序算是插入排序的一種,是改進版的直接插入排序,和直接插入排序不同的是它是按組進行插入排序的。步驟如下:

取乙個整數d1 = n / 2,將元素分成d1個組,每組相鄰元素之間距離d1,然後在每組內部進行直接插入排序。

取第二個整數d2 = d1 / 2再將元素分成d2個組,然後再在每組內部進行插入排序。

重複上面的步驟直到d = 1 的時候即所有元素在同一組進行插入排序。

例如陣列 [4,3,5,1,6,0,7,2]排序過程如下圖所示

希爾排序並每趟並不是使某些元素有序,而是使整體資料越來越有序,只會在最後一趟排序能使得所有元素都有序。

def shell_sort(nums):

d = len(nums) // 2

while d > 0: # 分組到一的時候停止

for i in range(d, len(nums)): # 第i個分組

temp = nums[i] #無序區第一位

j = i - d # 有序區最後一位

while j >= 0 and nums[j] > temp: # 如果有序區大於無序區

nums[j + d] = nums[j]

j -= d

nums[j+d] = temp

d //= 2

常用排序演算法 希爾排序

希爾排序 簡單描述 希爾排序是對插入排序的改進,插入排序每次只能移動一位,速度較慢 通過對資料進行分組,可以實現跨越式移動。基本思想 1 首先是步長的選擇,首先是陣列長度的一半,然後再每次減半最後直到步長為1 2 按照步長對資料進行插入排序 時間複雜度 比簡單插入排序 o n 2 要好,是在o nl...

常用排序演算法 希爾排序

希爾排序演算法的具體做法為 假設待排序元素序列有n個元素,取乙個小於n的整數增量值incremen作為間隔,將全部元素分為increment個子序列,將所有距離為increment的元素放在乙個序列中,並對每乙個序列執行直接插入排序。然後縮小increment,重複上述劃分子串行和排序的過程,直到最...

排序演算法 希爾排序

如果乙個排序演算法,每次只把諸專案移動乙個位置,則它的平均執行時間至少要和n2成比例.因為在這個排序演算法執行的過程當中,每個記錄平均都必須遍歷n 3個位置,因此如果要對直接插入排序進行有效的,實質性的改進的話,就要有一種演算法,它可以使記錄做長距離的跳躍,而不是一步一步的挪動.希爾排序也是一種插入...