No.1 排序 - 冒泡排序
作者:互联网
冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。时间复杂度O(N **2)
/* 同一个 project 内,只能有一个 main function*/
EG1. 输入一列数字,并以从大到小的顺序输出
#include <stdio.h>
void main()
{
int ll[100], i, j, t, n; //不确定列表长度,先申请100个
scanf("%d", &n); // scanf 中,默认以空格断字,无需再加空格
for (i=0; i<n; i++)
scanf("%d", &ll[i]); //按照顺序,将数字扫描如列表中
for (i=0; i<n; i++) //列表索引从 0 开始,n-1 结束,共 n 个数字
{ //嵌套循环代码块,最好使用多个 {} 分割
for(j=0; j<n-i; j++) //冒泡时,从第1位开始比较直到最后一个尚未归位的数
{
if (ll[j] < ll[j+1])
{
t=ll[j]; ll[j]=ll[j+1]; ll[j+1]=t;
}
}
}
for (i=0; i<n; i++)
printf("%d ", ll[i]); //printf 中加空格,使得打印以空格间距
//return 0;
}
EG2. 以学生的分数为准进行排序
struct student //创建一个结构体来存储学生姓名和分数,注意 char score
{
char name[20];
char score;
};
int main(){
struct student a[100], t; // t == student
int i,j,n;
scanf("%d", &n);
for (i=0; i<n; i++)
scanf("%s %d",a[i].name, &a[i].score); //&a[i].score,分数的内存指针,不是分数值
for (i=0; i<n-1; i++){
for(j=0; j<n-i; j++){
if (a[j].score < a[j+1].score){
t = a[j]; a[j]=a[j+1]; a[j+1]=t; // t 也是结构体,可以直接作为学生的中间变量
};
}
}
for (i=0; i<n; i++)
printf("%s %d ",a[i].name, a[i].score); // 注意 a[i].score 与 &a[i].score 的区别
return 0;
}
标签:int,ll,冒泡排序,空格,score,No.1,printf,排序,scanf 来源: https://www.cnblogs.com/yalimy/p/14977126.html