通过c++的sort函数实现成绩排序功能

 更新时间:2020年02月22日 15:54:49   作者:fourpoint  
这篇文章主要介绍了通过c++的sort函数实现成绩排序,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include<algorithm>的c++标准库中。

题目描述:

有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母排序,如果姓名的字母序也相同,则按照学生的年龄排序,并输出N个学生排序后的信息。

#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
struct E {
 char name[101];
 int age;
 int score;
}buf[1000];

bool cmp(E a, E b) {
 if (a.score != b.score) return a.score < b.score;
 int tmp = strcmp(a.name, b.name);
 if (tmp != 0) return tmp < 0;
 else return a.age < b.age;
}
int main() {
 int n;
 while (scanf_s("%d", &n) != EOF) {
 for (int i = 0; i < n; i++) {
 scanf_s("%s%d%d", buf[i].name,sizeof(buf[i].name), &buf[i].age, &buf[i].score);
 }
 sort(buf, buf + n, cmp);
 printf("\n");
 for (int i = 0; i < n; i++) {
 printf("%s %d %d\n", buf[i].name, buf[i].age, buf[i].score);
 } 
 }
 return 0;
}

注意事项

scanf和scanf_s区别使用,scanf_s需要标明缓冲区的大小,因而多出一个参数。 Unlike scanf and wscanf, scanf_s and wscanf_s require you to specify buffer sizes for some parameters. Specify the sizes for all c, C, s, S, or string control set [] parameters. The buffer size in characters is passed as an additional parameter. It immediately follows the pointer to the buffer or variable. For example, if you're reading a string, the buffer size for that string is passed as follows:

char s[10];
scanf_s("%9s", s, (unsigned)_countof(s)); // buffer size is 10, width specification is 9

微软参考文档

结果

运行结果

通过运算符重载来实现

#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
struct E {
 char name[101];
 int age;
 int score;
 bool operator <(const E &b) const {
 if (score != b.score) return score < b.score;
 int tmp = strcmp(name, b.name);
 if (tmp != 0) return tmp < 0;
 else return age < b.age;
 }
}buf[1000];

int main() {
 int n;
 while (scanf_s("%d", &n) != EOF) {
 for (int i = 0; i < n; i++) {
 scanf_s("%s%d%d", buf[i].name,sizeof(buf[i].name), &buf[i].age, &buf[i].score);
 }
 sort(buf, buf + n);
 printf("\n");
 for (int i = 0; i < n; i++) {
 printf("%s %d %d\n", buf[i].name, buf[i].age, buf[i].score);
 } 
 }
 return 0;
}

由于已经指明了结构体的小于运算符,计算机便知道了该结构体的定序规则。 sort函数只利用小于运算符来定序,小者在前。于是,我们在调用sort时便不必特别指明排序规则(即不使用第三个参数)。

总结

到此这篇关于通过c++的sort函数实现成绩排序的文章就介绍到这了,更多相关c++ sort函数内容请搜素脚本之家以前的文章或下面相关文章,希望大家以后多多支持脚本之家!

相关文章

  • C语言实现在windows服务中新建进程的方法

    C语言实现在windows服务中新建进程的方法

    这篇文章主要介绍了C语言实现在windows服务中新建进程的方法,涉及C语言进程操作的相关技巧,需要的朋友可以参考下
    2015-06-06
  • 深入了解C++的多态与虚函数

    深入了解C++的多态与虚函数

    这篇文章主要为大家详细介绍了C++多态与虚函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-07-07
  • 深度解析三个常见的C语言内存函数

    深度解析三个常见的C语言内存函数

    这篇文章主要深度解析了三个常见的C语言内存函数memcpy,memmove,memcmp,所以本文将对memcpy,memmove,memcmp 三个函数进行详解和模拟实现,需要的朋友可以参考下
    2023-07-07
  • C 语言中strstr函数实例详解

    C 语言中strstr函数实例详解

    这篇文章主要介绍了C 语言中strstr函数实例详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • C语言实现简易的扫雷小游戏

    C语言实现简易的扫雷小游戏

    这篇文章主要为大家详细介绍了C语言实现简易的扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • VC使用TerminateProcess结束进程实例

    VC使用TerminateProcess结束进程实例

    这篇文章主要介绍了VC使用TerminateProcess结束进程的方法,实例演示了TerminateProcess结束进程的具体实现过程,在进行VC应用程序开发时非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • QT实现QML侧边导航栏的最简方法

    QT实现QML侧边导航栏的最简方法

    本文主要介绍了QT实现QML侧边导航栏的最简方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 详解C++图搜索算法之双端队列广搜

    详解C++图搜索算法之双端队列广搜

    这篇文章主要为大家介绍一下C++图搜索算法中的双端队列广搜,文中通过例题详细介绍了双端队列广搜的使用方法,感兴趣的可以了解一下
    2022-06-06
  • 编写C++程序使DirectShow进行视频捕捉

    编写C++程序使DirectShow进行视频捕捉

    这篇文章主要介绍了如何编写C++程序来使DirectShow进行视频捕捉的方法,DirectShow是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM(Component Object Model)的流媒体处理的开发包,要的朋友可以参考下
    2016-03-03
  • C++11中的可变参数模板/lambda表达式

    C++11中的可变参数模板/lambda表达式

    C++11的新特性可变参数模板能够让我们创建可以接受可变参数的函数模板和类模板,相比C++98和C++03,类模板和函数模板中只能含固定数量的模板参数,可变参数模板无疑是一个巨大的改进,这篇文章主要介绍了C++11中的可变参数模板/lambda表达式,需要的朋友可以参考下
    2023-03-03

最新评论