【发布时间】:2014-04-17 13:17:52
【问题描述】:
我看到一段冒泡排序代码,最初我认为代码是错误的。但是在编译运行之后,令我惊讶的是它确实有效。我想知道第一个 for 循环中的第二个语句为什么不是条件而是赋值。另外,这段代码怎么不会无限循环呢?
PS:它会产生一个警告:“建议在赋值周围使用括号作为真值 [-W括号]”抱怨第一个 for 循环。令人惊讶的是,这不是错误。
#include <iostream>
void bubblesort(int A[], int n)
{
for (bool sorted = false; sorted = !sorted; n--)
{
for (int i = 1; i < n; ++i)
{
if (A[i-1] > A[i])
{
int tmp = 0;
tmp = A[i];
A[i] = A[i-1];
A[i-1] = tmp;
sorted = false;
}
}
}
}
int main()
{
int a[5] = {1,4,5,2,3};
bubblesort(a, 5);
for (unsigned int i = 0; i < 5; ++i)
{
std::cout << a[i] << std::endl;
}
return 0;
}
【问题讨论】:
-
虽然结果很有趣......永远不要使用它。
-
不可读但有效的代码,与 `if (sorted = !sorted) 相同。当您在“if”语句中误用“=”和“==”时,您将错过“安全警告”。
-
在我看来 100% 洁净。在我处理的代码中,条件内的赋值非常常见。
标签: c++ algorithm sorting bubble-sort