冒泡排序与多个条件在for循环



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

最新更新