Sorting 鸡尾酒排序使用多少比较?
标题。我对鸡尾酒类的比较数量感到困惑。冒泡排序使用n*(n-1)/2比较,鸡尾酒排序使用多少比较 冒泡排序使用Sorting 鸡尾酒排序使用多少比较?,sorting,bubble-sort,Sorting,Bubble Sort,标题。我对鸡尾酒类的比较数量感到困惑。冒泡排序使用n*(n-1)/2比较,鸡尾酒排序使用多少比较 冒泡排序使用n*(n-1)/2比较 如果您正确地实现了它,则不会 这是标准气泡排序的伪代码: procedure bubbleSort(A : list of sortable items ) n = length(A) repeat swapped = false for i = 1 to n-1 inclusive do /
n*(n-1)/2
比较
如果您正确地实现了它,则不会
这是标准气泡排序的伪代码:
procedure bubbleSort(A : list of sortable items )
n = length(A)
repeat
swapped = false
for i = 1 to n-1 inclusive do
/* if this pair is out of order */
if A[i-1] > A[i] then
/* swap them and remember something changed */
swap( A[i-1], A[i] )
swapped = true
end if
end for
until not swapped
end procedure
(来源:)
如您所见,气泡排序在通过列表/数组而不交换任何元素时停止。因此,当p
是通过次数时,交换次数为(n-1)*p
p
将小于或等于n
,这取决于输入数组的顺序
复杂性分析将O(N^2)
作为最坏和平均情况复杂性,将O(N)
作为最佳情况
同一篇维基百科文章描述了一种优化的冒泡排序,它最多执行(n-1)*(n-2)/2
比较,其中n-1
是最佳情况。这是标准气泡排序的大约2倍改进
鸡尾酒摇瓶排序被描述为气泡排序的替代优化。与标准气泡排序相比,它还提供了大约2倍的改进
(来源)
请注意,对于这些排序算法中的任何一种,都不可能给出精确的比较次数公式。在每种情况下,比较的数量取决于实际的输入数组,而不仅仅是元素的数量。我们只能给出最好和最坏情况的精确公式。您是如何计算出
n*(n-1)/2
?对于鸡尾酒类,你也能这样做吗?@f1sh不知道为什么这已经得到了这么多的反对票,这是一个简单明了的问题,有一个简短的答案。我没有,我用谷歌搜索了一下,找到了答案。鸡尾酒类的答案是不存在的,所以我想知道这里是否有人知道它。它得到了否决票,因为它把一个不正确的陈述当作事实。看看我的答案。我明白了,那我就不够精确了。我在寻找最坏情况下的比较次数。对于气泡排序,它仍然是我发布的公式,对于鸡尾酒排序,我仍然不知道。对于shaker和气泡排序,最糟糕的情况是输入按相反顺序排序。您应该能够处理交换的数量…谢谢,这很有帮助。这与最坏情况下的气泡排序相同。