适用于:对数据进行排序
算法复杂度为:核心部分是双重嵌套循环O(N^2)。
代码:
#include <stdio.h>
int main(void)
{
//数据准备
int a[100], i, j, t, n;
scanf_s("%d", &n); //输入一个数n,表示接下来有n个数
for (i = 1;i <= n;i++) //循环读入n个数到数组a中
scanf_s("%d", &a[i]);
//冒泡排序的核心部分
for (i = 1;i <= n - 1;i++) //n个数排序,只用进行n-1趟
{
for (j = 1;j <= n - i;j++) //从第1位开始比较直到最后一个尚未归位的数,想一想为什么到n - i就可以了。
{
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]);
getchar();getchar();
return 0;
}
运行结果:
评价:时间复杂度高
携带其他信息代码
#include <stdio.h>
struct student
{
char name[21];
int score;
};//这里创建了一个结构体用来存储姓名和分数
int main(void)
{
struct student a[100], t;
int i, j, n;
scanf_s("%d", &n); //输入一个数n
for (i = 1;i <= n;i++) //循环读入n个人名和分数
scanf_s("%s %d", a[i].name,2, &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", a[i].name);
getchar();getchar();
return 0;
}