简介Shellsort是我不久前遇到的一种有趣的排序算法。最神奇的是,不同的空位序列可以显着提高算法的速度。我读了一些书(没有广泛阅读),似乎Tokuda的序列被推荐用于实际应用。另一个有趣的地方是比率2.20~2.25的序列往往效率更高。所以我做了一个小的搜索,考虑从2.20到2.50的比率序列,并尝试搜索哪个比率可以平均表现良好。我遇到了这个比率:2.48,在许多不同的试验中似乎平均表现良好。然后,我想出了序列生成器:2.48k-1(我们称它为248序列)并尝试将其与Tokuda的序列进行比较。事实证明,它们的速度平均相等。248序列倾向于使用稍微多一些的比较。基准方法我没有使用毫
我正在阅读Sedgewick的“算法”中有关排序的章节。在此过程中,我编写了3个基本的排序算法:选择、插入和shell排序。书中说,尽管这三者都具有二次最坏情况的复杂性,但shell排序应该比随机数据的插入排序快得多。在书中,他们获得了600倍的性能提升。但我在笔记本电脑上得到以下乘法器(几乎不随阵列大小的增加而改变):选择:5.5倍插入:1x外壳:1.8倍!困扰我的问题是-为什么shell排序比插入排序慢将近两倍?!我想,我的shellsort实现有问题。但我几乎是从书上抄来的:classShellSortextendsSort{//precalculatesequence:1,4,
【希尔排序算法详解】Java/Go/Python/JS/C不同语言实现 说明希尔排序(ShellSort)是插入排序的一种改进版,也称递减增量排序算法(DiminishingIncrementSort),其实质是将数列分组,然后再按插入算法分别排序,因DL.Shell于1959年提出而得名。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时效率较高,可以达到线性排序的效率。但插入排序对于一般不规则数列来说是低效的,因为插入排序每次只能挪动一位数据。实现过程定义一个分组间隔(步长),分组规则可以是1/2数组长度或其他。按步长间隔取出数字组成子序列,针对子
【希尔排序算法详解】Java/Go/Python/JS/C不同语言实现 说明希尔排序(ShellSort)是插入排序的一种改进版,也称递减增量排序算法(DiminishingIncrementSort),其实质是将数列分组,然后再按插入算法分别排序,因DL.Shell于1959年提出而得名。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时效率较高,可以达到线性排序的效率。但插入排序对于一般不规则数列来说是低效的,因为插入排序每次只能挪动一位数据。实现过程定义一个分组间隔(步长),分组规则可以是1/2数组长度或其他。按步长间隔取出数字组成子序列,针对子