C语言_数组_冒泡排序

编写程序实现冒泡排序。

首先我们要了解冒泡法排序的算法思想:

对所有相邻记录的关键字值进行比较,如果是逆序则将其交换,最终达到有序化,其处理过程为:

  1. 将整个待排序的记录序列划分成有序区和无序区,初始状态有序区为空,无序区包括所有待排序的记录。
  2. 对无序区从前向后依次将相邻记录的关键字进行比较,若逆序将其交换,从而使得关键字值小的记录向上“飘浮”(左移),关键字值大的记录好像石块,向下“堕落”(右移)。 每经过一趟冒泡排序,都使无序区中关键字值最大的记录进入有序区,对于由n个记录组成的记录序列,最多经过n-1趟冒泡排序,就可以将这n个记录重新按关键字顺序排列。

以长度为n=10的序列(8 7 6 5 9 3 4 0 2 1)的冒泡排序过程做示范: 第一趟:在经过9次对所有相邻数据进行比较后,则数组中元素为(7 6 5 8 3 4 0 2 1 9); 第二趟:在经过8次对所有相邻数据进行比较后,则数组中元素为(6 5 7 3 4 0 2 1 8 9); 第三趟:在经过7次对所有相邻数据进行比较后,则数组中元素为(5 6 3 4 0 2 1 7 8 9); ……以此类推,共执行9趟操作,可将有n=10个元素的数组排成有序序列(0 1 2 3 4 5 6 7 8 9)

翻译一下:

给出一个数组:a[10]={29 62 73 90 93 46 43 38 76 52}

第一次循环从i=0开始将a[i]和a[i+1]比较,如果a[i]>a[i+1],则将二者互换。直到最大元素“沉底”(a[9]=93)。之后重复这个过程,使数组实现有序排序。

以下为编写展示:

测试输入:

10

29 62 73 90 93 46 43 38 76 52

输入说明: 第一行为n,表示n个整数。 第二行为n个整数(下面运行结果中前两行同)。

预期输出:

29 62 73 90 46 43 38 76 52 93

29 62 73 46 43 38 76 52 90 93

29 62 46 43 38 73 52 76 90 93

29 46 43 38 62 52 73 76 90 93

29 43 38 46 52 62 73 76 90 93

29 38 43 46 52 62 73 76 90 93

29 38 43 46 52 62 73 76 90 93

29 38 43 46 52 62 73 76 90 93

29 38 43 46 52 62 73 76 90 93

#include <stdio.h>
#define N 100
int main ()
{
	int a[N],n,i,j,t;
	scanf ("%d",&n);
	for (i=0;i<n;i++)
		scanf ("%d",&a[i]);
	for (i=0;i<n-1;i++)
	{
		for (j=0;j<n-1;j++)
		{
			if (a[j]>a[j+1])
			{
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
		}
		for (j=0;j<n;j++)
			printf ("%d ",a[j]);
		printf ("\n");
	}
	return 0;
}

 运行结果:

运行成功!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值