gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:59:33 24 4
gpt4 key购买 nike

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

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

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++;
}
}
}
}

它做同样的工作,但有什么不同吗?

最佳答案

正如一些人所指出的,您的没有标志的版本可以工作,但不必要地慢。

但是,如果您使用原始版本并丢弃标志(连同 break),它仍然可以工作。从您方便发布的不变量很容易看出。

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

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

关于c++ - 是否只有一种方法可以实现冒泡排序算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19828888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com