算法说明:
- 冒泡排序
- 用结构体实现分数和名字绑定,然后冒泡输出名字
复杂度分析:
- 这是 一个非常高的时间复杂度。
代码部分:
#include <stdio.h>
struct student
{
char name[21];
int sorce;
};//这里创建了一个结构体用来存储姓名和分数
int main() {
struct student a[1000], t;
int i, j,n;
printf("你要输入几个人的成绩:");
scanf_s("%d", &n);
for (i = 1; i <= n; i++)
{
scanf_s("%s %d", a[i].name,21, &a[i].sorce);
//scanf_s("%s", a[i].name, 21); 21不能省略
//对于% s而言,缺少一个参数,即字符数组的长度~
}
for ( i = 1; i <=n-1; i++)
{
for (j = 1; j <= n - i; j++)
{
if (a[j].sorce < a[j + 1].sorce)//是内循环的j,而不是i!!!
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
for ( i = 1; i <=n; i++)
{
printf("%s\n", a[i].name);
}
getchar(); getchar();
return 0;
}
输入:
你要输入几个人的成绩:5
huhu 5
haha 3
xixi 5
hengheng 2
gaoshou 8
输出:
gaoshou
huhu
xixi
haha
hengheng
总结:
缺点:
- 时间复杂度太高。//冒泡排序的时间复杂度是 O(N 2 )。
优点:
- 解决了桶排序浪费空间的问题。