越走越短

10 分钟

后面已经贴了封条的部分是排好的,不用再回头比。所以每多走一趟,要比较的范围就能缩短一截,越走越省力。

#include <iostream>
using namespace std;
int main() {
    int a[5] = {5, 3, 4, 1, 2}, n = 5;
    for (int i = 0; i < n - 1; i++)
        for (int j = 0; j < n - 1 - i; j++)    // 范围随 i 缩短
            if (a[j] > a[j+1]) {
                int t = a[j]; a[j] = a[j+1]; a[j+1] = t;
            }
    for (int i = 0; i < n; i++) cout << a[i] << " ";
    return 0;
}

第 1 趟比到 n-1,第 2 趟就只比到 n-2……内层条件里那个 -i 别丢。丢了虽然结果照样对,但会白比已经排好的部分,白费力气。

小纸条

第 2 趟要比到哪里?

登录 后可看答案

越走越短 · C++ 入门 · op599 课程