C++ sort()

快速排序 | C++|时间空间复杂度 快速排序(QuickSort)的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 阅读详情

 

C++中sort()函数的特性:

  • 标准函数sort() 的头文件:#include<algorithm>              std::sort;
  • sort() 默认是按元素从小到大排序;
  • sort() 能用到vector和set中,vector是线性容器,set是关联容器;
  • sort() 可以对静态的数组进行排序;
  • C++中自带sort() 排序方法,需要提供待排序序列的头地址、尾地址、排序方式(降序或升序);
  • sort() 时间复杂度为Nlog2(N);
  • vector,set,map这些容器需要用prev(xxx.end())才能取出容器中最后一个元素。
错误:cout <<" a.end()"<< *a.end() << endl;//执行这句话会报错!
cout << " prev(a.end)" << *prev(a.end()) << endl;//正确取出最后一个元素

语法:sort(start,end,ways)

  • start:序列头地址
  • end:序列尾地址
  • ways:排序方式,升序或降序,默认为升序。可自定义,也可以使用内置排序方法:less<数据类型>(),greater<数据类型>()   包含在std::less    std::greater中

例如:

(1)对静态数组排序

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

//对静态数组排序
int main()
{
    int a[5]={9,8,7,6,5};
    sort(a,a+10);  //默认排序为升序,a为首地址,a+10为尾地址(取不到)
    for(int i=0; i<5; i++)
        cout<<a[i]<<" ";
    return 0;
}

输出:5 6 7 8 9

(2)自定义排序

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

//自定义排序方式:告诉程序从大到小地排序
bool complare(int a,int b)
{
 return a>b;
}
int main()
{
    int a[10]={1,2,3,4,5};
    sort(a,a+5,compare);//compare不需要传入参数
    for(int i=0;i<5;i++)
        cout<<a[i]<<" ";
    return 0;
}

输出:5 4 3 2 1

(3)对vector容器排序 (用迭代器实现,string类似)

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

int my_cmp(pair<string,int> p1, pair<string,int> p2)
{
    return p1.second > p2.second;//按值从大到小排序
}
int main()
{
    vector<pair<string,int>> vec;
    vec.push_back(make_pair("s1",1));
    vec.push_back(make_pair("s2",3));
    vec.push_back(make_pair("s3",2));
    sort(vec.begin(), vec.end(), my_cmp); //vector用迭代器实现
    cout<<vec[0].first<<"  "<<vec[1].first<<"  "<<vec[2].first<<endl;
}

输出:s1 s3 s2

(4)对set容器排序 (用迭代器实现)

  • set是集合,内部的元素不会重复,同时它会自动进行排序,默认从小到大,
  • set的insert方法没有insert(a,cmp)这种重载,所以如果要把结构体插入set中,我们就要重载'<'运算符。
  • set方法在插入的时候也是从小到大的,那么我们重载一下<运算符让它从大到小排序
#include <iostream>
#include<string>
#include<algorithm>
#include<set>
using namespace std;

struct student
{
    char name[10];
    int score;
};
//自定义“大于”
bool comp(const student &a, const student &b){
    return a.score > b.score;
}
bool operator > (const student & stu1, const student &stu2){
    return stu1.score > stu2.score;
}
int main()
{
    set<student> setStudents;
    setStudents = {, };
    int n = 2;
    while (n--)
    {
        student oneStudent;
        string name;
        int score;
        cin >> name >> score;
        strcpy(oneStudent.name, name.c_str());
        oneStudent.score = score;
        setStudents.insert(oneStudent);
    }
    cout<<"排序前: "<<endl;
    (set<student>::iterator it = setStudents.begin(); it != setStudents.end(); it++)
    {
        cout<<it->name<<it->score<<endl;
    }
    sort(setStudents.begin(), setStudents.end(), comp);
    cout<<"排序后:"<<endl;
    for (set<student>::iterator it = setStudents.begin(); it != setStudents.end(); it++)
    {
        cout<<it->name<<it->score<<endl;
    }
    return 0;
}

输出:
排序前:
二明 98
大明 99

排序后:
大明 99
二明 98

参考:https://www.cnblogs.com/zhouxiaosong/p/5557990.html

排序算法复杂度对照表(含时间复杂度与空间复杂度) 下面给出的最优/平均/最差时间复杂度、额外空间复杂度,并在右侧给出简短说明(什么时候出现最优/最差或需要注意的地方)。所有复杂度以n为元素个数,k为键值范围,dL为关键字位数或字符串平均长度,M为内存缓冲能容纳的元素数,B为块大小(外存I/O 单位)。表格给出的是常见/典型实现的复杂度。备注:某些算法复杂度依赖实现细节(例如 Shell 的 gap 序列、Radix 的基数选择、外部排序的内存/磁盘参数等),表中注明“依赖”或给出常见情形。 阅读详情

相关推荐

【C++】sort()、stable_sort()和partial_sort()排序函数详解

本文通过示例对排序函数进行了详细的解读,在选择排序函数时,需要考虑你的具体需求。如果你不需要保持相等元素的顺序,那么可以使用 std::sort()。如果你需要保持相等元素的顺序,那么可以使用 std::stable_sort()。如果你只想对序列的一部分进行排序,那么可以使用 std::partial_sort()。

不定时分享,互相学习,共同进步 8302

sort的时间复杂度为

不是的,一般情况下,sort函数的时间复杂度为O(N logN)。这是因为常见的排序算法,如快速排序、归并排序和堆排序等,都需要通过比较和交换来对元素进行排序,而这些操作的平均时间复杂度为O(logN)。所以,当有N个元素需要排序时,时间复杂度通常为O(N logN)。但是,也有一些特殊场景下,sort函数的时间复杂度可能是O(N),比如当待排序的集合已经是有序的情况下,部分实现可能会使用优化策略,将时间复杂度降低到O(N)。但是这并不是sort函数的通常情况。

weixin_67916525的博客 2453

C++的sort()函数的用法详解

为什么要用c++标准库里的排序函数 sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高! c++标准库里的排序函数的使用方法 sort函数包含在头文件为#include<algorithm>的c++标准库中,调用标准库里的排序方法可以不必知道其内部是如何实现的,只要出现我们想要的结果即可! c ...

liaorongxiao的博客 3606

sort函数的时间、空间复杂度

sort函数进行排序的时间复杂度为n*log2n。 原理:不是简单的快排 STL的sort()算法,数据量大时采用Quick Sort,分段递归排序,一旦分段后的数据量小于某个门槛,为避免Quick Sort的递归调用带来过大的额外负荷,就改用Insertion Sort。如果递归层次过深,还会改用Heap Sort。 空间复杂度嘛,我还不清楚,待补充。 ...

cloudless_sky的博客 1万+

C++ sort() 底层逻辑

使用sort()函数需要的头文件为```algorithm``` 于是,sort函数的作用范围在宏观上便是**左闭右开区间:[第一个参数所对应的地址,第二个参数所对应的地址)** 以```int x[5]```为例,每个元素的数据宽度为4,当引用第一个元素(```&a[0]```)的地址时,实际上引用的是数据头部的地址 由于数组所占用的虚拟地址空间是连续的,因此,向sort传递第二个参数时,如果传递的参数是第五个元素的地址,那么实际传递的参数是第五个元素的数据头的地址(与第四个元素的数据尾的地址相同)

KSroido的博客 1959

C++常用函数之sort函数,头文件 algorithm

sort(起始地址,结束地址,比较器);其中比较器可以省略,默认升序。n),不能满足我们写题的需要。sort函数的排序方法类似于快排方法,时间复杂度为n。1、sort()函数是C++标准库中的排序函数,头文件为algorithm。这里要注意,map函数有一个按key值进行的自动排序功能(升序)我们最熟悉的冒泡排序和选择排序的时间复杂度过高o(n。3、sort()函数的参数。4、对vector排序。5、对map进行排序。......

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 3973

C++ sort()排序详解

本文对C++中的sort()做了一个比较详细的说明,包括为什么选择使用sort()、sort()函数的实现原理、sort()的使用方法等等。

晴空๓ 59万+

Palantir解密:从企业数字化能力构成说起,“本体”如何破解现代企业数据应用难题?

抛开技术外壳来看,Palantir“本体”的理念内核其实并不复杂:构建一个统一、可操作的数字现实,以高效驱动决策与行动。其技术实施和产品沉淀的过程诚然是高复杂性、高难度的,但这正体现了Palantir所代表的新硅谷“All in AI+”的战略决心。对于我们而言,必须深刻认识到:企业数字化能力建设既不是高精尖技术的简单堆砌,也不是局部场景的数字化改良,而是一场企业级的“数字孪生”——关乎战略、组织与业务全域的体系能力的重塑。

SZSDQJC的博客 1685

C++之sort()排序

文章目录一、使用sort()1.函数原型2.简单地使用sort()(1)默认排序(2)两种常用的排序方法3.自定义使用sort() 一、使用sort() 1.函数原型 sort(begin, end) sort(begin, end, pred) 作用:可以用来排序数组,容器等。 参数: begin:排序区间的起始位置 end:排序区间的结束位置(不包括) pred:自定义排序方式 排序...

sandalphon4869的博客 1万+

微电网模型Matlab Simulink,风光储微电网,永磁风机并网仿真,光伏并网仿真,蓄电池仿真

通过探究风光储微电网、永磁风机并网仿真、光伏并网仿真、蓄电池仿真、柴油发电机以及光储微电网和风储微电网等方面的技术,我们可以更好地理解微电网的工作原理和优化方法,从而为微电网的发展做出更大的贡献。微电网模型Matlab Simulink,风光储微电网,永磁风机并网仿真,光伏并网仿真,蓄电池仿真,柴油发电机,光储微电网 风储微电网 Matlab仿真平台搭建的风光储微电网模型,风光柴储微电网,pwm控制,风力发电,光伏发电,微电网并网离网切换,并网孤岛切换,功能强大。永磁风机的并网仿真是一个非常重要的环节。

sjbextz的博客 399

SAP Script表单开发中ABAP preform方法的实战应用与调试技巧

本文深入探讨了在SAP Script表单开发中调用ABAP程序(preform方法)的实战应用与调试技巧。通过一个获取供应商版本名称的实例,详细讲解了如何在SE71中嵌入PERFORM指令、编写ABAP子程序进行数据查询与处理,并重点介绍了使用SAP Script Debugger进行高效调试的方法,帮助开发者灵活扩展表单功能,实现复杂业务逻辑。

o0p1q2r3的博客 551

C++ 排序函数sort()

在实际应用中,默认的升序排序可能无法满足所有需求,我们可能需要根据特定的条件对数据进行排序。这时候,sort()函数的自定义排序功能就派上用场了,通过提供自定义的比较函数,我们可以实现各种灵活的排序规则。有时候,我们需要根据更复杂的规则对数据进行排序,比如按数字的个位数大小排序,或者对结构体按照某个成员变量排序。下面是两个示例,展示如何实现这些复杂的排序规则。按个位数大小排序// 按个位数大小排序的比较函数if (unitA!

weixin_62059655的博客 1万+

保姆级教程:用VESTA软件5分钟搞定纳米颗粒Wulff Construction建模(以Au金为例)

本文提供了一份详细的VESTA软件教程,指导用户如何在5分钟内完成纳米颗粒Wulff Construction建模,特别以金(Au)为例。从环境搭建、基础晶体结构创建到Wulff Construction设置和可视化优化,涵盖了全流程操作步骤和常见问题解决方案,适合科研新手快速上手。

weixin_29311017的博客 436

C++sort()函数用法讲解总结 ——————墨白

111

正直 的博客 2万+

Python+QMT量化交易实战:从零搭建你的第一个极速策略(附完整代码)

本文提供了一份详细的Python+QMT量化交易实战指南,手把手教你从零搭建一个可回测、可实盘的极速策略。内容涵盖环境配置、QMT核心机制解析、双均线策略的完整代码实现、回测优化方法以及实盘部署要点,帮助量化交易新手快速入门并掌握核心开发流程。

b9c0d的博客 1014

组态王的日历时间控件脚本

日期时间控件中的脚本中在小于10的月份和天数前必须要加上0,这是由首字符对比机制规定的,首字母相同,就不再不做对比了,比如1和11,是一样的。首字母不同,再比较下一位。 float Ayear1; float Amonth1; float Aday1; string temp1; Ayear1=sd.Year; Amonth1=sd.Month; Aday1=sd.Day; temp1=StrFromInt( Ayear1, 10 ); if(Amonth1<10) temp1=temp1+"-0"+

逍遥子的博客 5718

C++ 排序函数 sort(),qsort()的用法

C++中的sort()和qsort()是两种常用的排序方法。sort()属于C++标准库,功能强大且类型安全,支持自定义比较函数和STL容器;qsort()是C标准库函数,通过函数指针实现比较,适用于C风格代码但性能较低。主要区别:sort()更高效(内省排序)、支持模板和lambda,而qsort()兼容C但类型不安全。建议优先使用sort(),仅在需要兼容C时考虑qsort()。

m0_57545130的博客 1031

Prometheus+Grafana+alertmanager+PrometheusAlert监控告警 实现飞书告警

以上 是以grafana做的邮件告警,但是感觉邮件很少人看。下面是以webhook 可以接入。启动alertmanager (设置 开机在启动)下载prometheusalter 配置文件。这里的告警是基于grafana上搭建的。我们启动PrometheusAlert。写完之后进行重启Prometheus。prometheus 的告警规则。测试 基于我们生产环境做的文档。然后在grafana上导模板。上导入模板就可以 直接引用。访问 grafana页面。重启一下grafana。

墨痕诉清风的博客 859

C++ STL中的sort()和stable_sort()函数

关于sort()和stable_sort()区别与使用实例

JunJie的个人博客 4972

泛微OA集成阿里云短信(E9保姆教程)

泛微OA集成阿里云短信(E9保姆教程)

技术分享 515

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C++中sort()排序函数应用

** C语言中sort()排序函数应用 ** sort(first_pointer,first_pointer+n,cmp) 该函数可给数组,或者链表list、向量排序。 实现原理:sort并不是简单的快速排序,它对普通的快速排序进行了优化,此外,它还结合了插入排序和推排序。系统会根据你的数据形式和数据量自动选择合适的排序方法,这并不是说它每次排序只选择一种方法,它是在一次完整排序中不同的情况选用不同方法,比如给一个数据量较大的数组排序,开始采用快速排序,分段递归,分段之后每一段的数据量达到一个较小值后它就

m0_51562545的博客 5492

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C++排序sort()

sort()使用需要头文件<algorithm>和using namespace std; 函数名 功能描述 sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 partial_sort 对给定区间所有元素进行部分排序 partial_sort_copy 对给定区间复制并排序 nth_element 找出给定区间...

ChanCherry的博客 690

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

c++ 中sort()排序函数与qsort()

使用前,要#incldue sort()函数是 C++ 的内容,使用时需要包含algorithm库,并且要使用std命名空间。同样实现对。

Dear_JIANJIAN的博客 3426

C++竞赛常用库函数sort()

上面我们说到sort()函数可以自定义排序准则,以便满足不同的排序情况。使用sort()我们不仅仅可以从大到小排或者从小到大排,还可以按照一定的准则进行排序。比如说我们按照每个数的个位进行从大到小排序,我们就可以根据自己的需求来写一个函数作为排序的准则传入到sort()中。

xb1132的博客 990

C++ sort ()排序详解

C++ sort() 排序详解(2025 版) C++ std::sort() 是 STL <algorithm> 中的高效排序函数,基于 Introsort 算法(快速排序+堆排序优化),平均时间复杂度 O(n log n)。支持对 vector、array 等容器进行排序,提供默认升序和自定义比较器功能。核心特性包括: 基本用法:sort(begin, end) 或 sort(begin, end, comp) 自定义排序:可通过函数指针、lambda 或仿函数实现复杂规则 高级特性:部分排

likuoelie的博客 2020

c++中sort()的用法

C++sort()函数的用法近来看了c++标准库这本书,学到了很多,就把这其中的一点C++sort()函数的用法写下来和大家分享吧!(一)为什么要用c++标准库里的排序函数Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高!(二)c++

kaggle expert,全球排名前1000,清华计算机研究生,兴趣算法工程 2933
上一篇: C++ set 、unordered_set 
下一篇: C++ vector
JCjunior
博客等级 码龄11年 45粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值