是否只有一种方法可以实现冒泡排序算法?

时间:2013-11-07 05:50:51

标签: c++ sorting bubble-sort

我试图在不查看任何伪代码的情况下实现我自己的冒泡排序算法,但现在我已经成功完成了它,我的代码看起来与我在网上看到的示例有很大不同。它们都涉及处理一个真或假的交换变量。我的实现根本不包括那个,所以我没有进行冒泡排序吗?

以下是我在网上看到的一个例子:

for i = 1:n,
swapped = false
for j = n:i+1, 
    if a[j] < a[j-1], 
        swap a[j,j-1]
        swapped = true
→ invariant: a[1..i] in final position
break if not swapped

以下是我的实现:

void BubbleSort(int* a, int size)
{
    while (!arraySorted(a, size))
    {
        int i = 0;
        while (i < (size-1))
        {
            if (a[i] < a[i+1])
            {
                i++;
            }
            else
            {
                int tmp = 0;
                tmp = a[i+1];
                a[i+1] = a[i];
                a[i] = tmp;
                i++; 
            }
        }
    }
}

它完成同样的工作,但它是否以不同的方式做到了?

1 个答案:

答案 0 :(得分:0)

正如有些人所说,没有旗帜的你的版本有效,但是不必要地慢了。

但是,如果您使用原始版本并丢弃该标志(与break一起),它仍然有效。从你方便发布的不变量中很容易看出。

没有中断的版本与中断的最坏情况大致相同(最坏的情况是以相反顺序排序的数组)。如果你想要一个保证在预定义的时间内完成的算法,它比原来的好。

维基百科描述了泡泡排序的another idea for optimization,其中包括丢弃break

相关问题