越走越短
约 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 趟要比到哪里?
登录 后可看答案