【发布时间】:2012-11-17 19:59:00
【问题描述】:
我找到了两个冒泡算法,但我不确定哪个是正确的......
第一个例子:
for (int i = 1; i < input.Length-1; i++)
for (int j = 0; j < input.Length - 1 - i; j++)
if (input[j] > input[j + 1])
swap(input, j, j + 1);
第二个例子:
for (int i = 1; i < input.Length-1; i++)
for (int j = 0; j < input.Length - 1; j++)
if (input[j] > input[j + 1])
swap(input, j, j + 1);
Wikipedia Example
对于输入:5 1 4 2 8
第一个例子:6 次比较
第二个例子:12 个比较
第一关:
( 5 1 4 2 8 ) --> ( 1 5 4 2 8 ), Swap since 5 > 1
( 1 5 4 2 8 ) --> ( 1 4 5 2 8 ), Swap since 5 > 4
( 1 4 5 2 8 ) --> ( 1 4 2 5 8 ), Swap since 5 > 2
( 1 4 2 5 8 ) --> ( 1 4 2 5 8 )
第二关:
( 1 4 2 5 8 ) --> ( 1 4 2 5 8 )
( 1 4 2 5 8 ) --> ( 1 2 4 5 8 ), Swap since 4 > 2
( 1 2 4 5 8 ) --> ( 1 2 4 5 8 )
( 1 2 4 5 8 ) --> ( 1 2 4 5 8 )
第三遍
( 1 2 4 5 8 ) --> ( 1 2 4 5 8 )
( 1 2 4 5 8 ) --> ( 1 2 4 5 8 )
( 1 2 4 5 8 ) --> ( 1 2 4 5 8 )
( 1 2 4 5 8 ) --> ( 1 2 4 5 8 )
编辑:当我说哪个是正确的时,我的意思是哪个是原始冒泡排序
【问题讨论】:
-
两个例子都不正确
-
@EgorSkriptunoff 哈哈,伙计,他们不是不正确的……他们来自书……维基百科也使用了 2 个循环
-
是的,两者都是正确的。第一个是优化的。当你下线时,你不需要检查整个数组,因为它的故事已经排序了。
-
@Loclip - 不要相信书籍。用你的大脑代替。第一个示例从不触及数组的最后一个元素,因此在排序 {1,3,2} 时失败。第二个示例执行了太多冗余操作而无法“正确”。
标签: c# algorithm comparison bubble-sort