【C语言】冒泡排序,你学会了吗
什么是冒泡排序
冒泡排序分为两种,升序和降序,今天我们说升序,相信你能触类旁通
(升序)冒泡排序:比如一组数据936582147,将第一个数据9与第二个数据3比较,9>3,交换9与3的位置:396582147,9再与右边的6比较。若大于6,则交换位置。否则,不交换位置,并将后者再与其右边的数比较。直到将该数据中的最大值排到最右边。得一趟,第二趟,依旧是从第一个数开始比较,大的往后交换…
n个数需要排n-1次(跑n-1趟,一趟将一个数移动到最右边):最后剩下的数就是最小数,无需再后移。
外层循环:i=0;i<n-1;i++
跑一趟,将一个数移动到最右边,需要两两比较,大的往后移;n个数,第一趟需要比较n-1次。第二趟需要比较n-2次(因为第一趟已经排好一个了,排好一个,就少比一个)…
内层循环:j=0;j<n-1-i;j++
例题:题目
输入描述:
两行,第一行输入一个整数,表示n个学生(>=5),第二行输入n个学生成绩(整数表示,范围0~100),用空格分隔。
输出描述:
一行,输出成绩最高的前五个,用空格分隔。
代码实现:
#include <stdio.h>
int main() {
int grade[20]={0};
int i=0;
int n=0;
//输入n个学生
scanf("%d\n",&n);
//输入成绩
for(i=0;i<n;i++)
{
scanf("%d ",&grade[i]);
}
//冒泡排序(升序)
for(i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(grade[j]>grade[j+1])
{
int temp=0;
temp=grade[j];
grade[j]=grade[j+1];
grade[j+1]=temp;
}
}
}
//逆序输出后5个数
for(i=n-1;i>=n-5;i--)
{
printf("%d ",grade[i]);
}
return 0;
}
关注我:学更多经典必会的C语言题目!
你可能感兴趣的:
C语言求解水仙花数:https://blog.csdn.net/qq_63188326/article/details/128411808