天天看點

資料結構(python) —— 【16排序: 希爾排序】

希爾排序

希爾排序(Shell Sort)是一種分組插入排序算法

希爾排序過程:

  1. 首先取一個整數d1=n/2, 将元素分為d1個組,每組相鄰量元素之間距離為d1,在各組内進行直接插入排序;
  2. 取第二個整數d2=d1/2,重複上述分組排序過程,直到d1=1,即所有元素在同一組内進行直接插入排序。
  3. 希爾排序每趟并不使某些元素有序,而是使整體資料越來越接近有序;最後-趟排序使得所有資料有序。

示意GIF:

資料結構(python) —— 【16排序: 希爾排序】

GIF中我隻展示了如何進行分組,比如d=4的時候,分為4組,即4個清單,每個清單中都用選擇排序進行排序。

廢話不多說,上代碼:

'''
TOP: 希爾排序
author: Blue
time: 2020-08-07
QQ: 2458682080
'''


def insert_sort_gap(li, gap): # gap是隻分的組數
    for i in range(gap, len(li)):   # i 表示摸到的牌的下标
        temp = li[i]
        j = i - gap   # j 指的是手裡的牌的下标
        while j >= 0 and li[j] > temp:
            li[j+gap] = li[j]   # 摸到的牌左邊的拍右移
            j -= gap
        li[j + gap] = temp

def shell_sort(li):
    d = len(li) // 2
    while d >= 1:
        insert_sort_gap(li, d)
        d //= 2

li = list(range(100))
import random
random.shuffle(li)
shell_sort(li)
print(li)
           

結果為:

希爾排序的時間複雜度與其選的gap有關!!!

繼續閱讀