在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++;
}