邻居好说话——冒泡排序

冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。
代码如下:

#include
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
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;
}

你可能感兴趣的:(学习之algorithm)