虽然这样做真的很傻,但我觉得在给定合适的算法的情况下绝对可以做到。也就是说,为什么快速排序的最佳情况不是O(1)?
答案 0 :(得分:0)
虽然你可以通过检查输入的大小和这种情况下的短路来开始实现,但我所拥有的快速排序的描述仍然会执行许多步骤。
我读了第一步计算索引,该索引将子数组分成两个分区,其中一个或两个分区都可能为空。然后使用quicksort递归排序这些子数组(假设它们是空的,这是你结束递归的地方)。子阵列现在已经排序。据说是最坏情况Θ(n 2 )和平均情况 O(n lg n)。如果你用1替换 n 是的,它看起来有点常数,但是 O 是一个边界,不会以这种方式使用。
也就是说,我看到的实现只有在子数组的低索引输入小于高索引的输入时才会进行分区。 IE在子阵列中至少有2个元素。
答案 1 :(得分:0)
必须为size-1和even-0列表定义QuickSort的任何实现,因为当您递归地将集合划分为更小的部分时,您将不可避免地遇到这些大小的子集。在纸上运行,你会看到。
为什么快速排序的最佳情况不是O(1)?
这是对大O符号的误解。它描述了算法如何根据元素的数量进行缩放。 QuickSort永远不会是O(1),因为它最少必须运行一次递归除法策略,这需要(N *(log N))次迭代(因此在最佳情况下缩放为O(N *(log N))