shellSort

作者: zh_19 | 来源:发表于2018-12-18 11:48 被阅读8次

希尔排序是基于插入排序的以下两点性质而提出改进方法的:

插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率
但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位
算法思路:

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

extension Array where Element: Comparable {
        mutating func shellSort() {
        var h = 1
        while h < count / 2 {
            h = h * 2
        }
        while h >= 1 {
            // 无序区
          //排序时 不是先把一组全部排序  而是按顺序一个一个的排
            for i in h..<count {
                var insert = i
                let value = self[i]
                // 有序区
                while insert > h - 1 && self[insert - h] >= value {
                    self[insert] = self[insert - h]
                    insert -= h
                }
                self[insert] = value
                debugPrint("-===-=-=-=-\(self)")
            }
            h = h / 2 
        }
    }
}

参考

常见排序算法 - 希尔排序 (Shell Sort)

相关文章

  • ShellSort

    思想:待排序的记录按增量分割若干区域,然后对每个区域的对应的元素进行insertionSort。 增量为n/2,即...

  • shellsort

    shell sort是insertion sort的一种,insertion sort每次只将元素移动一个位置,效...

  • shellSort

    希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以...

  • 算法4 Java解析:习题 2.1.12

    算法4 Java解析:习题 2.1.12 问题 Instrument shellsort to print the...

  • 排序算法-7---希尔排序

    排序算法-7---希尔排序 概念 希尔排序(Shellsort),也称递减增量排序算法,是一种典型的插入排序算法,...

  • 数据结构算法-希尔排序

    希尔排序原理 现在,我要讲解的算法叫希尔排序(ShellSort)。希尔排序是D.L.Shell于1959年提出来...

  • 希尔排序

    希尔排序(Shellsort)的名称源于它的发明者 Donald Shell,该算法是冲破二次时间屏障的第一批算法...

  • 排序算法之6:希尔排序 ShellSort

    维基百科解释:希尔排序 希尔排序:也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法...

  • 算法(一)之排序算法(四)——希尔排序(ShellSort)

    希尔排序也是八大排序算法之一,它是在插入排序的基础上演变而来的,也称缩小增量排序,是直接插入排序算法的一种更高效的...

网友评论

      本文标题:shellSort

      本文链接:https://www.haomeiwen.com/subject/qkpicqtx.html