【排序】希尔排序

0x01 描述

希尔排序的主要思路是:

  1. 先取一个正整数 d1(d1 < n),把全部记录分成 d1 个组,所有距离为 d1 的倍数的记录看成一组,然后在各组内进行插入排序;
  2. 然后取 d2(d2 < d1),重复上述分组和排序操作;
  3. 直到取 di = 1(i >= 1) 位置,即所有记录成为一个组,最后对这个组进行插入排序。一般选 d1 约为 n/2,d2 为 d1 /2, d3 为 d2/2 ,…, di = 1。

0x02 python代码

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
import random

def shellSort(L):
    count = len(L)
    gap = count // 2
    while gap > 0:
        for i in range(0, gap):
            k = i + gap
            while k < count:
                for j in range(i + gap, count, gap):
                        if L[j] < L[j - gap]:
                            L[j], L[j - gap] = L[j - gap], L[j]
                k += gap
        gap //= 2
    return L

if __name__ == '__main__':
    num_list = [random.randint(0, 100) for i in range(100)]
    num_list = shellSort(num_list)
    print(num_list)

你可能感兴趣的:(【排序】希尔排序)