Shell排序只比Bubble排序快3倍?

时间:2016-07-23 09:14:56

标签: c shellsort

我在C中实现了Shell排序,它只比Bubble排序快3倍。 以下是我的排序持续时间,以秒为单位:

body: JSON.stringify({'password': 'nopass'}),

这是正常的还是我的实施可能有问题?

2 个答案:

答案 0 :(得分:0)

我有一个排序基准测试程序,内置4种shell排序和冒泡排序变体。这四种变体中有三种具有相似的计时属性;第四个比其他三个差得多。但是,当排序大小为1000时,3个shell排序小于100μs而慢速排序小于600μs,冒泡排序小于900μs,但在10,000个大小时,时间在1-2ms到70ms vs 142ms之间变化,大小为100,000,时间在14-30ms之间,而8.6s与18s之间。因此,其中一种shell类型的速度大约是冒泡排序速度的一半,但其他类型的方式更好。 - 乔纳森莱弗勒

好的,我更改了实现,使用插入排序逻辑在Shell排序期间对子向量进行排序,所以现在它按预期执行 - LynnXe

答案 1 :(得分:0)

我会说这是您实施中的“问题”。

shellsort的棘手之处在于,对于要排序的给定序列的n个值,存在一组空位,这将导致shellsort在一般情况下优于所有其他空位集或标准算法那件事*。好的间隙不足会导致性能不佳甚至表现不佳。

Knuth,Sedgewick,Ciura和其他公司的序列并不是很好,但让我们面对现实吧,考虑到我们对算法秘密的了解相对较少,在n的情况下找到最佳的缺口集是一项艰巨的任务。

评估差距以找到最佳差距是一件棘手的事情(尤其是对于大量价值而言),这是我撰写的here文章。

  • 测试了其中n <= 16
  • 的一组值

___________________编辑___________________

我建议您为n = 100尝试以下一组缺口:{99,60,16,4,1},我认为这将改善您的100整数shellsort结果。