十大排序算法——希尔排序

以下内容为个人学习笔记的整理。

原理:
把代排序列按照一定的gap步长进行分组,然后按照插入排序算法进行排序

示意图:
十大排序算法——希尔排序_第1张图片
实现代码(python):

def shell_sort(alist):
    '希尔排序'
    n = len(alist)
    gap = n // 2
    while gap >= 1:   #gap为1时,执行的是插入 排序
        for j in range(gap, n):
            i = j
            while i > 0:
                if alist[i] < alist[i-gap]:
                    alist[i-gap], alist[i] = alist[i], alist[i-gap]
                    i -= gap     #按gap进行比较
                else:
                    break
        gap //= 2

复杂度分析:
-空间复杂度
选择排序过程不需要额外的空间,因此空间复杂度为O(1)。

-时间复杂度
–最优时间复杂度:O(n^1.3)(据说是数学家计算所得)
–最坏时间复杂度:O(n^2)
–平均时间复杂度:O(nlogn)~O(n^2)

是否原地排序算法:
希尔排序是一种原地排序算法

稳定性:
不稳定,比如2,6,1,3,2,进行第三次排序后,2个2的位置变了。

你可能感兴趣的:(学习笔记)