前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >冒泡排序的编程与应用实现 C语言

冒泡排序的编程与应用实现 C语言

作者头像
timerring
发布2025-05-24 16:14:29
发布2025-05-24 16:14:29
11800
代码可运行
举报
文章被收录于专栏:TechBlogTechBlog
运行总次数:0
代码可运行

一 、目的:

1.    掌握常用的排序方法,并掌握 C 语言实现排序算法的方法; 2.    了解各种排序方法过程及依据原则,并掌握各种排序方法的时间复杂度和稳定性的分析方法。

二 、环境:

operating system version:Win11 CPU instruction set:  x64 Integrated Development Environment:Viusal Studio 2022

三 、内容:

统计成绩 【问题描述】:给出n个学生的考试成绩表,每条信息由姓名和分数组成,利用排序算法完成以下任务: 1) 按照分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次。 2) 按照名次列出每个学生的姓名和分数 【要求】学生的考试成绩需要从键盘输入数据建立,同时要设计输出格式。

四 、要求:

1) 能够采用常用的排序算法中的一种实现以上两个任务;

五 、步骤:

1.程序:

代码语言:javascript
代码运行次数:0
运行
复制
#include "stdio.h"  
#include "string"  
  
  
using std::string;  
  
int main() {  
    string name[100];  
    int score[100];  
    int rank[100];  
    int num;  
    printf("请输入学生的总人数:\n");  
    scanf("%d", &num);  
    printf("请分别输入学生姓名和对应的分数:\n");  
    printf("==========================================\n");  
    for (int i = 1; i <= num; i++)  
    {  
        printf("请输入 学生%d 的姓名:\n", i);  
        scanf("%s", &name[i]);  
        printf("请输入 学生%d 的分数:\n", i);  
        scanf("%d", &score[i]);  
        rank[i] = i;  
    }  
    int min;  
    int tmp;  
    int i;  
    for (i = 1; i <= num; i++) {  
        for (int j = i + 1; j <= num; j++)  
        {  
            if (score[i] < score[j])  
            {  
                min = score[i];  
                score[i] = score[j];  
                score[j] = min;  
  
                tmp = rank[i];  
                rank[i] = rank[j];  
                rank[j] = tmp;  
            }  
        }  
    }  
    printf("姓名        分数        排名\n");  
    int n = 1;  
    for (i = 1; i <= num; i++)  
    {  
        int m = rank[i];  
        printf("%s         %d", &name[m], score[i]);  
        printf("           %d\n", n);  
        if (score[i] == score[i + 1])  
        {  
            n--;  
        }  
        n++;  
    }  
    return 0;  
}  

2.程序结果:

程序运行,我使用的测试数据如下所示:

六 、小结:

        此次是关于排序的编程与实现,我采用了冒泡排序的思想,将学生按照分数降序排序的。每一趟只能确定将一个数归位。即第一趟只能确定将末位上的数归位,第二趟只能将倒数第 2 位上的数归位,依次类推下去。如果有 n 个数进行排序,只需将 n-1 个数归位,也就是要进行 n-1 趟操作。而 “每一趟 ” 都需要从第一位开始进行相邻的两个数的比较,将较大的数放后面,比较完毕之后向后挪一位继续比较下面两个相邻的两个数大小关系,重复此步骤,直到最后一个还没归位的数。冒泡排序一共要进行(n-1)次循环,每一次循环都要进行当前n-1次比较所以一共的比较次数是:(n-1) + (n-2) + (n-3) + … + 1 = n*(n-1)/2;所以冒泡排序的时间复杂度是 O(n2)。空间复杂度就是在交换元素时那个临时变量所占的内存空间;最优的空间复杂度就是开始元素顺序已经排好了,则空间复杂度为:0;最差的空间复杂度就是开始元素逆序排序了,则空间复杂度为:O(n),平均的空间复杂度为:O(1)。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 、目的:
  • 二 、环境:
  • 三 、内容:
  • 四 、要求:
  • 五 、步骤:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档