题目描述
第一层循环就是就是从第二个位置开始一直到最后第n位元素开始需要插入排序,每往前插入一个元素a[i]都要往后移一位,就有了第二层循环。
样例
#include<iostream>
#include<cstring>
using namespace std;
const int N = 1010;
int a[N];
int n;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
int i, j;
for (i = 2; i <= n; i++) {
a[0] = a[i]; //把a数组第零个位置设置为哨兵
//第一层循环是把每个数组中每个元素当作哨兵从小到大的位置排序
for (j = i - 1; a[j] > a[0]; --j) {
//循环找到第一个小于哨兵的0-i内的元素之前,逐个往后挪移位
a[j + 1] = a[j];
}
//把第找到的第一个小于位置的后面插入哨兵;
a[j + 1] = a[0];
}
for (i = 1; i <= n; i++) cout << a[i] << ' ';
cout << endl;
return 0;
}