#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) }}