排序—冒泡

来源:互联网 发布:excel 数据收集 编辑:程序博客网 时间:2024/05/16 12:36

二,冒泡排序
冒泡排序的基本思想是:每次比较两个相邻的元素,如果他们的顺序不满足要求就把它们的位置调换。
每一次循环都能将未比较的最小的数放到后面
例如需要将33,12,55,43,71这五个数从大到小排列
33 12 55 43 71 ——>33 12 55 43 71——>33 55 12 43 71 ——>33 55 43 12 71——>33 55 43 71 12
第一轮循环结束时就得到了这个结果,12已经到达了最后面 ,一共进行n-1(假设有n个数)趟循环就能够完成排序.

int main(){int a[100],i,j,t;printf("请输入有多少个数需要排序");scanf("%d",&n);for(i=1;i<=n;i++)scanf("%d",&a[i]);     //循环读入n个数到数组a中for(i=1;i<=n-1;i++)   //n个数排序,只需进行n-1趟for(j=1,j<=n-i;j++){if(a[j]<a[j+1]){                      //交换t=a[j+1];a[j+1]=a[j];a[j]=t;}}for(i=1;i<=n;i++){printf("%d",a[i]);   //输出结果}return 0;}

问题引申:若是想输出的不是分数,而是分数对应的人,进行排名

code如下:

#include <stdio.h>struct student{char name[15];int score;};     //这里创建了一个结构体用来存储姓名和分数int main(){struct student  a[11],t;int i,j,n;scanf("%d",&n);     //输入总数for(i=1;i<=n;i++)  scanf("%s %d",a[i].name,&a[i].score);    //读入n个人的姓名和分数  //按分数从高到低排序  for(i=1;i<=n;i++)  for(j=1;j<=n-i;j++)  {  if(a[j].score<a[j+1].score){  t=a[j+1].score;  a[j+1].score=a[j].score;  a[j].score=t;  }  }for (i=1;i<=n;i++)printf("%s\n",a[i].name);     //输出人名return 0;}