C语言中用“起泡法排序”解决排序问题

问题: 有10个地区的面积,要求对他们按由小到大的顺序排列。
解析: 这种问题称为数的排序。排序的规律有两种:一种是“升序”,从小到大;另一种是“降序”,从大到小。可以把这个题目抽象为一般形式“对n个数按升序排序”。
  排序的方法有很多种,本例用“起泡法”排序。“起泡法”的基本思路是:每次将相邻两个数比较,将小的调到前头。若有6个数:9,8,5,4,2,0。第1次先将最前面两个数8和9对调。第2次将第2和第3个数(9和5)对调…如此共进行5次,得到8-5-4-2-0-9的顺序,可以看到:最大的数9已“沉底”,成为最下面一个数,而小的数“上升”。最小的一个数0已向上“浮起”一个位置。经过第一趟(共5次比较与交换)后,已得到最大的数9。
  然后进行第2趟比较,对余下的前面5个数(8,5,4,2,0)进行新一轮的比较,以便使次大的数“沉底”。按以上方法进行第2趟比较。经过这一趟4次比较与交换,得到次大的数8。
  按此规律进行下去,对6个数要比较5趟,才能使6个数按大小顺序排列。在第1趟中要进行两个数之间的比较共5次,在第2趟过程中比较4次…第5趟只须比较1次。
  如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。
  代码实现:

#include <stdio.h>
int main()
{
	int a[10];
	int i,j,t;
	printf("input 10 numbers:\n");
	for(i=0;i<10;i++){
		scanf("%d",&a[i]);
	}
	printf("\n");
	for(j=0;j<9;j++){
		for(i=0;i<9-j;i++){
			if(a[i]>a[i+1]){
				t=a[i];a[i]=a[i+1];a[i+1]=t;
			}
	 	
	 }
}
	printf("the sorted numbers :\n");
	for(i=0;i<10;i++){
		printf("%d ",a[i]);
	}
	printf("\n");
	
	return 0;
}

输出:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Bug_fuck/article/details/85944132