Sorting 鸡尾酒排序使用多少比较?

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比较,鸡尾酒排序使用多少比较

冒泡排序使用
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和气泡排序,最糟糕的情况是输入按相反顺序排序。您应该能够处理交换的数量…谢谢,这很有帮助。这与最坏情况下的气泡排序相同。