消零燕归来

希尔排序

2021-06-01  本文已影响0人  jeneen1129

分类:

比较类-交换排序

定义:简单直观

Shell sort。也被称为希尔排序。1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。希尔排序的核心在于间隔序列的设定。既可以提前设定好间隔序列,也可以动态的定义间隔序列。

难度:

中等

步骤:

先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序。

演示:

代码实现(javascript):

function shellSort(arr) {
    var len = arr.length;
    for (var gap = Math.floor(len / 2); gap > 0; gap = Math.floor(gap / 2)) {
        for (var i = gap; i < len; i++) {
            var j = i;
            var current = arr[i];
            while (j - gap >= 0 && current < arr[j - gap]) {
                 arr[j] = arr[j - gap];
                 j = j - gap;
            }
            arr[j] = current;
        }
    }
    return arr;
}

python:

def shell_sort(alist):
    """希尔排序"""
    n = len(alist)
    gap = n / 2
    while gap >= 1:
        for j in range(gap, n):
            i = j
            while (i - gap) >= 0:
                if alist[i] < alist[i - gap]:
                    alist[i], alist[i - gap] = alist[i - gap], alist[i]
                    i -= gap
                else:
                    break
        gap /= 2

属性:

时间复杂度(平均) 时间复杂度(最坏) 时间复杂度(最好) 空间复杂度 稳定性
O(n^1.3) O(n²) O(n) O(1) 不稳定

使用场景:

可以用于大型的数组,希尔排序比插入排序和选择排序要快的多,并且数组越大,优势越大。

以上仅供学习~~

上一篇 下一篇

猜你喜欢

热点阅读