在for循环中使用多个条件进行冒泡排序
bubble sort with with multiple conditions in for loop
实施 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++;
}
实施 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++;
}