用冒泡法实现C的排序问题

题目:将一组数字按从大到小的顺序排序
分析:要想对一串数字进行排序,就先要为它们创建一个空间来存放它们,我们可以创建一个数组来实现,如数组a[5]中存放了5个数字:38 57 20 89 18 它们在数组中的存储如图所示:

用冒泡法来解决的思想是:先用a[0]和a[1]比较,如果a[1]比a[0]大,就将a[0]和a[1]中的值交换,再用a[0]和a[2]、a[3]、a[4]依次比较,用同样的方法找出这组数中最大的一个,放在a[0]中,第一轮循环结束后,数组中存放的数如下图所示:

再接着用a[1]和数组中剩余的数比较,找出剩余数中最大值,放入a[1]中,数组中的数应是:89 57 20 38 18,第二轮循环结束;再用a[2]和剩余数比较,找出最大值,放入a[2]中,数组中的数应是:89 57 38 20 18,第三轮循环结束;再用a[3]和最后的数比较,最大值放入a[3]中,此时数组中数的存放应是:

排序完毕。

由此可以看出,实现这一方法要用到两层循环,外层循环执行4次,内层循环的初始值从外层循环的次数+1处开始直到数组结束才循环完毕。


要实现从小到大排序的方法类似,每次外层循环找出数组中的最小值即可。
此方法适用于任意大小的数组排序。
代码如下:
#include<stdio.h>

int main()
{
	int a[5] = {0};
	int i = 0;
	int j = 0;
	int temp = 0;
	printf("请输入五个数:\n");
	for(i=0;i<5;i++)
	{
		scanf("%d",&a[i]);
	}
	printf("五个数从大到小输出为:\n");
	for(i=0;i<4;i++)
	{
		for(j=i+1;j<5;j++)
		{
			if(a[j]>a[i])
			{
				temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
		}
	}
	for(i=0;i<5;i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
}
执行结果如下:


猜你喜欢

转载自blog.csdn.net/cottonrose_orange/article/details/80528312