在(大多数)关于排序的研究论文中,作者得出结论,他们的算法需要n-1
比较来排序'n'大小的数组(其中n是数组的大小)
...谁谁
但是当涉及到编码时,代码使用了比结论更多的比较。
更具体地说,他们对比较做了什么假设?
他们没有考虑什么样的比较?
如果你看一下冻结排序或增强插入排序就好了。没有。在比较中,这些算法在实际代码中的含量超过了它们在图中所指定的数量(比较数和元素数)
答案 0 :(得分:1)
在排序算法中完成的最少可能的次数比较可以是n-1
。在这种情况下,您根本不会实际排序,您只需要检查数据是否已经排序,基本上只是将每个元素与它之前和之后的元素进行比较(这在{的最佳情况下完成) {3}})。很容易看出不可能做比这更少的比较,因为那时你有不止一个不相交的你所比较的集合,这意味着你不会知道这些集合中的元素如何相互比较。
如果我们谈论的是平均/最差情况,insertion sort所需的比较次数为Ω(n log n)。
递归或迭代的算法不会(直接)影响比较次数。我认为我们可以专门针对递归排序算法的唯一声明可能是递归深度。这在很大程度上取决于算法,但it's actually been proven具有n-1
附近的(最坏情况)递归深度。
答案 1 :(得分:0)
if (<stop clause>)
return ...;
),类似于循环迭代器。
n-1
比较对数组进行排序
(最差/平均情况),因为排序是Omega(nlogn)
问题。
但是,authour的意思是排序需要
n-1
在算法的每个步骤进行比较,并且可能存在
多个(通常O(logn)
)这些步骤。