据我所知,Comb sort也应该在子二次时运行,就像shell排序一样。这是因为梳理排序是冒泡排序shell排序与插入排序的关系。 Shell排序根据应用插入排序的间隙序列对数组进行排序,类似梳子排序根据应用冒泡排序的间隙序列对数组进行排序。那梳子排序的运行时间是多少?
答案 0 :(得分:1)
(这个问题暂时没有答案,所以我将我的评论转换成答案。)
虽然shell sort和comb sort之间有相似之处,但comb sort的平均情况运行时为O(n 2 )。证明这有点棘手,我所见过的用于证明它的技术是incompressibility method,这是一种涉及Kolmogorov复杂性的信息理论技术。
希望这有帮助!
答案 1 :(得分:1)
以什么顺序递增?
如果增量选择为:表格的所有数字的集合(2 ^ p * 3 ^ q),小于N,那么,是的,运行时间是优于二次方(它与N的对数平方的N倍成比例)。使用 增量集,Combsort使用相同的增量(" Pratt序列")与Shellsort执行完全相同的交换。但这并不是人们在谈论Combsort时通常会想到的。
理论上......
随着几何上减少的增量(例如,在输入上的每次传递,增量是,例如,大约是前一增量的80%),这是人们在谈论Combsort时通常的意思...是的,渐近,在最坏情况和平均情况下, 是二次的。但...
在实践中......
只要增量是相对素数并且一个增量和下一个增量之间的比率是合理的(80%是好的),n必须在平均之前天文地大>运行时间将远远超过n.log(n)。我使用Combsort一次对数亿条记录进行了分类,而且当我通过构建"杀手输入"故意设计它们时,我只见过二次运行时间。在实践中,相对较高的增量(以及相邻增量之间的比率为1.25:1),即使是数百万条记录,Combsort平均需要的数量是mergesort的3倍,通常需要2到3倍的时间跑。