实现1
using namespace std;
void bubble_sort(vector<int> &a, int n)
{
for (int i = n - 1; i > 0; i--)
{
for (int j = 1; (j <= i) and (a[j - 1] > a[j]); j++)
{
std::swap(a[j], a[j - 1]);
}
}
}
这对给定的向量根本没有排序。
2实现
using namespace std;
void bubble_sort(vector<int> &a, int n)
{
for (int i = n - 1; i > 0; i--)
{
for (int j = 1; j <= i ; j++)
{
if(a[j - 1] > a[j])
std::swap(a[j], a[j - 1]);
}
}
}
但这是预期的工作。问题似乎与for循环中的多个条件有关。在for循环中链接多个条件时,我从未遇到过任何问题。我可以知道第一个实现的问题是什么吗?
for (int j = 1; (j <= i) and (a[j - 1] > a[j]); j++) {
std::swap(a[j], a[j - 1]);
}
等价于
int j = 1;
while (true)
if (!(j <= i and a[j - 1] > a[j])) { break; }
std::swap(a[j], a[j - 1]);
j++;
}
与
for (int j = 1; j <= i ; j++) {
if(a[j - 1] > a[j])
std::swap(a[j], a[j - 1]);
}
等价于
int j = 1;
while (true)
if (!(j <= i)) { break; }
if (a[j - 1] > a[j])) {
std::swap(a[j], a[j - 1]);
}
j++;
}