冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。
代码如下:
#include<stdio.h>
int main(){
int a[100],i,j,t,n;
scanf("%d",&n); //输入一个数n,表示接下来有n个数
for(i = 1; i <= n; i++) //循环输入n个数到数组a中
scanf("%d",&a[i]);
//冒泡排序的核心部分
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];
a[j] = a[j+1];
a[j+1] = t;
}
}
for(i = 1; i <= n; i++) //输出结果
printf("%d ",a[i]);
return 0;
}
现在分别有5个人的名字 和分数:huhu 5分、haha 3分、xixi 5分、hengheng 2分和gaoshou 8分。请按照分数高低,输出它们的名字。这个时候我们可以用冒泡排序来做。
代码如下:
#include<stdio.h>
struct student
{
char name[21];
int score;
}; //这里创建一个结构体用来存储姓名和分数
int main(){
int i,j,n;
struct student a[100],t;
scanf("%d",&n); //输入一个数n,表示接下来有n个数
for(i = 1; i <= n; i++) //循环输入n个人名和分数
scanf("%s %d",a[i].name,&a[i].score);
//冒泡排序的核心部分
for(i = 1; i <= n-1; i++)
for(j = 1;j <= n-i; j++)
{
if(a[j].score < a[j+1].score) //对分数进行比较大小并交换
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
for(i = 1; i <= n; i++) //输出结果
printf("%s\n",a[i].name);
return 0;
}