有关Shell排序的问题

时间:2018-11-26 05:55:20

标签: sorting shellsort

我是一名大二学生,正在上数据结构课程,今天的课程是关于排序算法的。 我们学习了选择排序,冒泡排序,插入排序,Shell排序,快速排序和合并排序(类按此顺序排列)。 而且据我所知,Shell排序的设计和设计比普通的插入排序要快。

所以过程是:

  1. 使用差距将原始列表分为几个子列表。
  2. 使用插入排序对子列表进行排序。
  3. 连续减小间隙,并重复直到间隙达到1。

我希望直到这个水平我都没错。如果我愿意,请告诉我。

如果到目前为止我是对的,我的问题是:

如果设计并认为这种称为“ Shell sort”的算法比普通的插入排序要快,那么为什么不在步骤2中递归使用Shell排序呢?在对子列表进行排序时,使用Shell排序而不是插入排序可以使此逻辑更快。

1 个答案:

答案 0 :(得分:0)

您做了一个有趣的观察。递归Shellsort想法已在OEIS序列A036569中使用(在Wikipedia文章[1]中进行了一定程度的使用):

1 3 7 3*7 3*16 7*16 3*7*16 3*7*41 3*16*41 7*16*41 3*7*16*41...

但是,如[1底部的图所示,此IS85序列在其间隙之间具有大的GCD,不如在其间隙之间具有小的GCD的其他序列。

很明显,Shellsort交织子列表的步骤越多,它进行的总体比较就越少(这是基于经验结果的推测,而不是定理)。举一个极端的例子,请阅读[1]中Shell原始间隙序列的行为。