当前位置: 首页 > 编程笔记 >

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

柯天宇
2023-03-14
本文向大家介绍通过c++的sort函数实现成绩排序功能,包括了通过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#通过IComparable实现ListT.sort()排序,包括了C#通过IComparable实现ListT.sort()排序的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#通过IComparable实现ListT.sort()排序的方法,分享给大家供大家参考之用。具体方法如下: 通常来说,List<T>.sort()可以实现对T的排序,比如List<int>.so

  • 本文向大家介绍PHP实现排序堆排序(Heap Sort)算法,包括了PHP实现排序堆排序(Heap Sort)算法的使用技巧和注意事项,需要的朋友参考一下 算法引进: 在这里我直接引用《大话数据结构》里面的开头: 在前面讲到 简单选择排序 ,它在待排序的 n 个记录中选择一个最小的记录需要比较 n - 1 次,本来这也可以理解,查找第一个数据需要比较这么多次是正常的,否则如何知道他是最小的记录。

  • 本文向大家介绍angular过滤器实现排序功能,包括了angular过滤器实现排序功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了angular过滤器排序的具体代码,供大家参考,具体内容如下 首先定义一个json文件:   然后写HTML文件: angular: 在这种运用到的过滤器有filter 、orderBy 这样就完成了一个简单的排序,希望能帮到大家! 以上就是本文的全部

  • 本文向大家介绍javascript排序函数实现数字排序,包括了javascript排序函数实现数字排序的使用技巧和注意事项,需要的朋友参考一下 javascript排序函数实现数字排序 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 本文向大家介绍C#通过yield实现数组全排列的方法,包括了C#通过yield实现数组全排列的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#通过yield实现数组全排列的方法。分享给大家供大家参考。具体分析如下: 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。 希望本文所述对大家的C#

  • 主要内容:升序,降序我们在学习 Java 的过程中肯定会遇到对数组进行升序或降序等排序问题,本节主要介绍如何实现 Java 数组的升序和降序。Java 语言使用 Arrays 类提供的 sort() 方法来对数组进行排序。 升序 使用 java.util.Arrays 类中的 sort() 方法对数组进行升序分为以下两步: 导入 java.util.Arrays 包。 使用 Arrays.sort(数组名) 语法对数