#C05L01P03. C05.L01.插入与冒泡排序.引例2.冒泡排序

C05.L01.插入与冒泡排序.引例2.冒泡排序

题目描述

输入 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;
	scanf("%d",&n);
	
	for(i=1;i<=n;i++) scanf("%d",&a[i]);
	
	 
	for(i=n;i>1;i--)
	{
		// a[i] 之后的数字为已经排序好的数字(从 a[i+1] 到 a[n] 为从小到大)
		// a[1] 到 a[i] 为还没有排序的数字
		// 每循环一轮,就能到 a[1] 到 a[i] 里面最大的数字冒泡到 a[i] 位置 
		for(j=填空(1);j<填空(2);j++)
			if(a[j]<a[j+1]) //相邻的2个数字比较
				填空(3);
	}
	
	for(i=1;i<=n;i++)
		printf("%d ",a[i]);

	return 0;
}

填空(1):{{ input(1) }}

填空(2):{{ input(2) }}

填空(3):{{ input(3) }}

把小的数字冒泡到前端

#include<bits/stdc++.h>
using namespace std;
int a[1001];
int main()
{
	int n,i,j;
	scanf("%d",&n);
	
	for(i=1;i<=n;i++)
		scanf("%d",&a[i]);

	for(i=1;i<n;i++)
	{
		// a[1] 到 a[i-1] 为已经排序的数字
		// a[i] 到 a[n] 为未排序的数字
		// 每一轮循环,就是在 a[i] 到 a[n] 范围内,把最小的数字冒泡到 a[i] 位置 

		for(j=填空(4);填空(5);j--)
			if(a[j]<a[j-1]) //相邻两个数字的比较 
				填空(6); 

	}
	
	for(i=1;i<=n;i++)
		printf("%d ",a[i]);

	return 0;
}

填空(6):{{ input(4) }}

填空(5):{{ input(5) }}

填空(4):{{ input(6) }}