排序(sort自定义)

这篇具有很好参考价值的文章主要介绍了排序(sort自定义)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.sort介绍

sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序;

sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高;

sort函数包含在头文件为#include<algorithm>的c++标准库中。

2.函数介绍

语法

Sort(start,end,cmp)

参数

(1)start表示要排序数组的起始地址;

(2)end表示数组结束地址的下一位;

(3)cmp用于规定排序的方法,可不填,默认升序。

功能

sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。

一般是直接对数组进行排序,例如对数组a[10]排序,sort(a,a+10)。而sort函数的强大之处在可与cmp函数结合使用,即排序方法的选择。 

为什么要用c++标准库里的排序函数?

sort()函数是c++一种排序方法之一,相较冒泡排序和选择排序所带来的执行效率不高的问题,sort()函数使用的排序方法是类似于快速排序的方法,时间复杂度为n*log2(n),执行效率较高。

3.示例

示例一

sort函数没有第三个参数,实现的是从小到大(升序)排列

#include<iostream>

#include<algorithm>

using namespace std;

int main()

{

    int a[10]

    for(int i=0;i<10;i++)

    cout<<a[i]<<endl;

    sort(a,a+10);

    for(int i=0;i<10;i++)

    cout<<a[i]<<endl;

    return 0;

}

示例二

如何实现从大到小的排序?

这就如前文所说需要在sort()函数里的第三个参数了,告诉程序我要从大到小排序。

需要加入一个比较函数compare(),此函数的实现过程如下

bool compare(int a,int b)

{

    return a>b;

}

实现从大到小的排序的方法

#include<iostream>

#include<algorithm>

using namespace std;

bool compare(int a,int b)

{   

return a>b;

}

int main()

{

int a[10];

for(int i=0;i<10;i++)

cout<<a[i]<<endl;  

sort(a,a+10,compare);//在这里就不需要对compare函数传入参数了   

for(int i=0;i<10;i++)

cout<<a[i]<<endl;

return 0;

}

 

结构体类型

struct node

{    

int a;    

int b;    

double c;

}

有一个node类型的数组node arr[100],对它进行排序:先按a值升序排列,如果a值相同,再按b值降序排列,如果b还相同,就按c降序排列。就可以写一个比较函数

bool cmp(node x,node y)

{    

if(x.a!=y.a) return x.a<y.a;    

if(x.b!=y.b) return x.b>y.b;    

return x.c>y.c;

}

4.例题

问题描述:

某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前 55 名学生发奖学金。期末,每个学生都有 33 门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。

任务:先根据输入的 33 门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前 55 名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是:

77 279279
55 279279

这两行数据的含义是:总分最高的两个同学的学号依次是 77 号、55 号。这两名同学的总分都是 279279 (总分等于输入的语文、数学、英语三科成绩之和) ,但学号为 77 的学生语文成绩更高一些。如果你的前两名的输出数据是:

55 279279
77 279279

则按输出错误处理,不能得分。

输入

共 n+1n+1行。

第 11 行为一个正整数n ( \le 300)n(≤300),表示该校参加评选的学生人数。

第 22 到 n+1n+1 行,每行有 33 个用空格隔开的数字,每个数字都在 00 到 100100 之间。第 jj 行的 33 个数字依次表示学号为 j-1j−1 的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为 1\sim n1∼n(恰好是输入数据的行号减 11)。

所给的数据都是正确的,不必检验。

//感谢 黄小U饮品 修正输入格式

输出

共 55 行,每行是两个用空格隔开的正整数,依次表示前 55 名学生的学号和总分。

Sample 1

Inputcopy Outputcopy
6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98
6 265
4 264
3 258
2 244
1 237

Sample 2

Inputcopy Outputcopy
8
80 89 89
88 98 78
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98
8 265
2 264
6 264
1 258
5 258

代码 

#include<iostream>
#include<algorithm>
using namespace std;

struct stu
{
	int number;
	int Chinese,Math,English;
	int sum;
}student[500];

bool cmp(stu a,stu b)
{
	if(a.sum==b.sum&&a.Chinese==b.Chinese) return a.number<b.number;
	else if(a.sum==b.sum) return a.Chinese>b.Chinese;
	return a.sum>b.sum;
}

int main(void)
{
	int n;
	
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		student[i].number=i;
		scanf("%d%d%d",&student[i].Chinese,&student[i].Math,&student[i].English);
		student[i].sum=student[i].Chinese+student[i].Math+student[i].English;
	}
	sort(student+1,student+n+1,cmp);
	
	for(int i=1;i<=5;i++) 
	printf("%d %d\n",student[i].number,student[i].sum);
	
	return 0;
}

 文章来源地址https://www.toymoban.com/news/detail-430566.html

到了这里,关于排序(sort自定义)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#-sort()利用委托自定义排序

    坚持记录实属不易,希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区! 谢谢~ 使用委托自定义Sort()方法,实现排序 例子:演示的是对链表的排序 (力扣算法中等题:147、对链表进行插入排序的非标准解法) 委托自定义排序 以val的值为标准,对

    2024年01月24日
    浏览(39)
  • Python之排序函数sort(),sorted(),sort_values(),sort_index().

    1. sorted()函数 sorted()函数是Python的内置函数,此函数不改变原序列,在排序后会生成一个新的序列。调用时,一般只需要给出一个序列即可,该序列可以是列表,字典,元组,字符串。其余参数取默认值,默认为升序排序。最终结果将返回一个以列表为容器的返回值。若该序

    2024年02月04日
    浏览(46)
  • C#中sort排序相关用法介绍

     C#中,List.Sort() 不仅为我们提供了默认的排序方法,还为我们提供了4种自定义排序的方法,通过默认排序方法,我们无需重写任何Sort()方法的实现代码,就能对单参数类型的List数据进行单一规则的排序,如果通过对这些方法进行改进我们可以轻松做到对多参数、多规则的复

    2024年02月15日
    浏览(60)
  • 使用Collections.sort方法来对自定义对象进行排序

    Collections.sort方法可以用来对自定义对象进行排序。要实现这一点,需要在调用该方法时传入一个比较器,该比较器用于指定如何比较对象中的值。 举个例子,假设有一个自定义对象Person,其中包含姓名和年龄两个属性,我们可以使用以下代码对该对象列表进行按年龄排序:

    2024年02月13日
    浏览(47)
  • JAVA的sort用法详解(二维数组排序,List<>排序,lambada表达式,自定义类型排序)

    目录 前言: 一维数组降序: 方法1.Comparator接口: 代码实现: 方法2.Collections.reverseOrder(): 代码实现:  二维数组排序: 代码如下: List排序: 代码如下: 自定义类型比较排序: 按照年龄逆序排序: 按照姓名升序排序: lambada表达式简写: 一维数组逆序代码: 二维数组排

    2024年04月09日
    浏览(65)
  • 【第43天】sort 的复杂运用 | 对二维数组与结构体实现自定义排序

    本文已收录于专栏 🌸《Java入门一百练》🌸

    2024年01月17日
    浏览(39)
  • 【C++】iota函数 + sort函数实现基于一个数组的多数组对应下标绑定排序

    目录 一、iota函数 1. 函数解析 ​①  迭代器类型(补充) ② 头文件 ③  参数 2. 函数用途与实例 二、sort函数 1、 函数解读 2、实现倒序排列 2.1 greater 与 less 模板参数 2.2  lambda表达式 三、下标绑定排序(zip) --- 833.字符串中的查找与替换 ①  迭代器类型(补充) ForwardIterator :

    2024年02月12日
    浏览(56)
  • C语言sort()函数的使用 详细介绍

    qsort()函数(quick sort)是快速排序算法,可以排序任意数据类型的数组其中就包括整形,浮点型,字符串甚至自定义的结构体类型。 下图是4个参数的含义 我们要排序一个数组,首先要知道从哪儿开始排序,所以先把首元素地址传给qsort函数。  我们还要知道数组从哪里结束,但

    2024年02月05日
    浏览(45)
  • acceptNavigationRequest()是Qt WebEngine模块中的一个函数,用于在Web页面加载时决定是否接受导航请求。它可以用于自定义处理链接点击或页面导航的行为

    acceptNavigationRequest() 是Qt WebEngine模块中的一个函数,用于在Web页面加载时决定是否接受导航请求。它可以用于自定义处理链接点击或页面导航的行为。 该函数通常用于继承自 QWebEngineView 或 QWebEnginePage 的类中重写。其函数原型如下: 参数说明: url :导航请求的URL。 type :导

    2024年02月04日
    浏览(56)
  • 排序算法(stable_sort(), sort())

    sort函数我相信大家都不陌生,今天介绍一个新的排序算法stable_sort stable_sort:稳定排序算法,维持相等元素的原有顺序。 假如我们定义一个字符串数组 这些字符串是按照字典序排列的,我们现在想要words按照单词长度从小到大重排的同时,还希望具有相同长度的元素按照字典

    2024年02月07日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包