#C05L01P02. C05.L01.插入与冒泡排序.引例1.插入排序
C05.L01.插入与冒泡排序.引例1.插入排序
题目描述
输入 N 个整数,使用插入排序法从小到大输出。
输入格式
第一行 1 个正整数:N ,范围在[1,1000]。
第二行 N 个整数,每个整数范围在[0,1000000]。
输出格式
一行 N 个从小到大的整数。
样例
4
5 3 6 1
1 3 5 6
4
5 5 1 9
1 5 5 9
完成程序
#include<bits/stdc++.h>
using namespace std;
int n,a[1001];
int main()
{
int i,j,k,temp;
scanf("%d",&n);
for(i=1;i<=n;i++) scanf("%d",&a[i]);
for(i=2;i<=n;i++)
{
//从 a[1] 到 a[i-1] 为一个从小到大有序的数列
//a[i]到 a[n]是未排序的数,排序的过程就是把未排序的数插入到已经排好序的数字当中
temp = 填空(1); //temp记录着要插入的数字
for(k=填空(2);填空(3)&&k<i;k++); //在已经有序的队列里找到第一个比 a[i] 大的,就是插入位置
//跳出循环的时候,a[k]>a[i],也就是说 a[i]要插到a[k]前面
//存可能 a[1] 到 a[i-1] 全部都比 a[i] 小,这种情况下,跳出循环的时候 k = i,下一步把 a[i] 插入到 a[k] 位置也是对的,就是自己插入到自己的位置,前面的数没有动。
for(j=填空(4);j>=填空(5);j--) //从 a[k]到 a[i-1]的这些数,全部后挪 1 个位置
填空(6);
a[k] = temp; //在a[k] 这个位置放入之前的a[i]。之前的a[i]现在已经被a[i-1]覆盖了,从temp找到旧的a[i]
}
for(i=1;i<=n;i++)
printf("%d ",a[i]);
return 0;
}
填空(1):{{ input(1) }}
填空(2):{{ input(2) }}
填空(3):{{ input(3) }}
填空(4):{{ input(4) }}
填空(5):{{ input(5) }}
填空(6):{{ input(6) }}
相关
在以下作业中: