C++ sort排序函数的用法总结

sort()排序函数(c++) 阅读详情

标准模板库STL中的sort()函数,时间复杂度为n*log2(n),执行效率较高。

 用法:

①、sort()函数可以三个参数也可以两个参数;

②、必须的头文件 #include < algorithm>和using namespace std。

③、它使用的排序方法类似于快排,时间复杂度为n*log2(n)

sort()函数有三个参数:(第三个参数可不写)

(1)第一个是要排序的数组的起始地址。

(2)第二个是最后一位要排序的元素的下一位的地址。

(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到

大排序。 

sort函数,左闭右开,即 int a[10]={2,4,1,23,5,76,0,43,24,65}。 sort(a,a+10)。

两个参数用法:

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

int main(){
 	int a[10]={2,4,1,23,5,76,0,43,24,65};
 	for(int i=0;i<10;i++){
 		cout<<a[i]<<" ";
 	}
 	cout<<endl;
	  	
	sort(a,a+10);     //STL中sort函数
 	for(int i=0;i<10;i++){
 		cout<<a[i]<<" ";
 	}
	return 0;
}

输出结果是升序排列。(两个参数的sort默认升序排序)

结果:


三个参数:

①、加入一个比较函数 complare():

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

bool complare(int a,int b){
	return a>b;
} 

int main(){
 	int a[10]={2,4,1,23,5,76,0,43,24,65};
 	
	//打印原数组 
	for(int i=0;i<10;i++){
 		cout<<a[i]<<" ";
 	}
 	cout<<endl;
	
	//排序  	
	sort(a,a+10,complare);
 	
	//打印排序后的数组 
	for(int i=0;i<10;i++){
 		cout<<a[i]<<" ";
 	}
	return 0;
}

结果:

②、使用 less<数据类型>(),或 greater<数据类型>():

less<数据类型>()//从小到大排序

greater<数据类型>()//从大到小排序

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

int main(){
 	int a[10]={2,4,1,23,5,76,0,43,24,65};
 	
	//打印原数组 
	for(int i=0;i<10;i++){
 		cout<<a[i]<<" ";
 	}
 	cout<<endl;
	
	//排序  	
	sort(a,a+10,greater<int>());
 	
	//打印排序后的数组 
	for(int i=0;i<10;i++){
 		cout<<a[i]<<" ";
 	}
	return 0;
}

结果:

③、对向量vector排序:

1、使用 sort(vec.begin(),vec.end())排序;

2、使用sort(vec.begin(),vec.end(),greater<int>())排序。

     vector<int> vec(arr,arr+10);   // 用数组元素初始化vector容器,左闭右开,即+元素数量 。

     sort(vec.begin(),vec.end(),greater<int>());  // <>里面只需装容器所容纳的元素的类型

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

int main(){
	int arr[10]={5,6,1,9,3,7,3,1,0,8};
	
    //vector容器存放arr数组中的元素 
	vector<int> vec(arr,arr+10);   //经典!用数组元素初始化vector容器,左闭右开,即+元素数量 
	for(int i=0;i<vec.size();i++){
		cout<<vec[i]<<" ";
	} 
	cout<<endl;
	
	//使用默认排序方法: 
	sort(vec.begin(),vec.end());
	cout<<"使用默认排序方法:    ";
	for(int i=0;i<vec.size();i++){
		cout<<vec[i]<<" ";
	}
	cout<<endl;			 
	
	//使用greater<>()规则: 
	sort(vec.begin(),vec.end(),greater<int>());  //这就很神奇了!!!
	
	cout<<"使用greater<>()规则: ";
	for(int i=0;i<vec.size();i++){
		cout<<vec[i]<<" ";
	} 
	
	return 0;	
}

结果:

③、对字符数组进行排序:

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

int main(){
	char arr[11]="asdfghjklk";
	
	sort(arr,arr+10,greater<char>());
	
	for(int i=0;i<10;i++){
		cout<<arr[i]<<" ";
	} 
	
	return 0;	
}

结果:

④、对字符串排序:

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

int main(){
	string arr="asdfghjklk";
	
	sort(arr.begin(),arr.end(),less<char>());
	
	for(int i=0;i<10;i++){
		cout<<arr[i]<<" ";
	} 
	
	return 0;	
}

结果:

⑤、 对结构体排序:

1、自定义规则;

2、运算符重载。

1、自定义规则: 

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

struct student{
	string name;
	int age;	
};

//自己定义的规则:按姓名从小到大排列,若姓名一样,按年龄从小到大排列 
bool comp(student s1,student s2){
	if(s1.name==s2.name){
		return s1.age<s2.age;
	}
	else{
		return s1.name<s2.name;
	}
}

int main(){
    student s[100];
    s[0].name="zhangsan";s[0].age=19;
    s[1].name="zhangsan";s[1].age=18;
    s[2].name="lisi";s[2].age=20;
    sort(s,s+3,comp);//左闭右开,所以是对s[0]到s[2]排序 
    
	for(int i=0;i<3;i++){
        cout<<s[i].name<<" "<<s[i].age<<endl;
    }
		
	return 0;	
}

 结果:

2、运算符重载:

bool operator < (const student &s) const

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

struct student{
	string name;
	int age;
	
	bool operator < (const student &s)const{//符号重载 
        if(name==s.name){
            return age<s.age;
        }
        else{
            return name<s.name;
        }
    }
};

int main(){
    student s[100];
    s[0].name="zhangsan";s[0].age=19;
    s[1].name="zhangsan";s[1].age=18;
    s[2].name="lisi";s[2].age=20;
    sort(s,s+3);//左闭右开,所以是对s[0]到s[2]排序 
    
	for(int i=0;i<3;i++){
        cout<<s[i].name<<" "<<s[i].age<<endl;
    }
		
	return 0;	
}

 结果:


string 使用反向迭代器来完成逆序排列

#include <iostream>
using namespace std;

int main()
{
	string str("cvicses"); //用()对字符串赋值 
	string s(str.rbegin(),str.rend());  //反向迭代器,将字符串str翻转,赋值给字符串s 
	
	cout << s <<endl; //打印字符串s 
	return 0;
}

结果:

NOTICE:

 数据量较大时,用sort不太好,比如,员工年龄那道题,这时就要自己写排序函数了。

C++中sort函数使用方法 一.sort函数 1.sort函数包含在头文件为#include<algorithm>的c++标准库中,调用标准库里的排序方法可以实现对数据的排序,但是sort函数是如何实现的,我们不用考虑! 2.sort函数的模板有三个参数: void sort (RandomAccessIterator first, RandomAccessIterator last, Compa... 阅读详情

相关推荐

C++ sort函数第三个参数的理解

1.sort函数用法 C++reference中,最复杂的重载函数定义如下: void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp); 平时常用前两个参数,分别代表需要排序的起始位置和终止位置,第三个参数是排序的规则,可以省略,此时就是默认排序规则(从小到大排列) comp函数可以自己编写,以适应不同的数据结构。比如要排列一个结构体,采用降序排列 #include <algorithm> s

我不是码农的博客~~~ 1256

C++ Sort函数详解

C++sort函数介绍、案例,自定义排序方法。

zhangbw's blog 15万+

【STM32学习】(29)STM32实现595驱动三个数码管(标准库和HAL库实现)

我选用的单片机型号为:STM32F103系列 74LS595是一个串转并行输出的芯片,它能为单片机节省很多的IO口,应用场景广泛。 现要求三个数码管动态显示,常规设计都是并行实现,需要8个IO数据口,然后还需要3个IO片选数码管接口,这样大大占用了IO口,导致连接的外设变少。因此我们引入74LS595芯片。电路设计如下: 只需要三个共阴极数码管与三个595芯片级联即可完成,通过RCLK,SCK,SER三个IO即可完成对数码管的动态控制并显示。电路焊接的实物图如下: 要求完成功能:实现数.

XiaoCaiDaYong的博客 8265

sort函数的第三个参数的理解

关于c++的库中sort函数第三个参数的理解 sort()函数有三个参数,前两个参数很好理解,但是为了实现一下自定义数据类型的排序,所以理解到第三个参数尤为重要 第三个参数是一个自定义函数 一般可以写成 bool complare(自定义数据类型 x, 自定义数据类型 y) { return 比较对象x > 比较对象y; } 此时就是按照从大到小是顺序排列,因为return 后面是大于号; 举个例子 自定义了一个学生属性的结构体 strict students{ int number;//学

weixin_43526952的博客 2868

workbench谐响应

定义材料 打开Engineering Data定义材料,在分析时不同部分选择不同材料 建模 打开Geometry建模,我举的例子很简单就一根光秃秃的轴 因为要加轴承,在轴上创建imprint face 因为要用point mass代替轴上原来的盘,在轴上盘的位置新建一个Plane,用Slice方法将轴从XYPlane3分成两段 施加边界条件以及谐响应分析 打开Model 1.在两段轴的交界面处,创建Point Mass,输入质量与转动惯量,位置在轴线上 2.mass point promote to.

my blogs include programming, math, physics.回首过去,放眼未来。 leslielee.blog.youkuaiyun.com 5886

从solidworks导出URDF模型

一、下载sw_urdf_exporter插件 ROS目前提供了SolidWorks转URDF的插件,叫做sw_urdf_exporter,从http://wiki.ros.org/sw_urdf_exporter下载sw2urdfSetup.exe文件,下载后点击安装,安装完成后就能在solidworks中导出URDF模型了。 二、创建solidworks模型 下面以较为简单的四轮小车为例进行说...

weixin_45168199的博客 4万+

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

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

m0_57545130的博客 1031

如何设计ADAS系统功能状态机(一)

状态机模块在自动驾驶系统中扮演着关键的角色,它负责管理和控制各个功能的状态转换和行为执行。今天我们来聊聊如何设计自动驾驶系统的状态机。

supass2018的博客 1616

C++中sort排序函数的原理用法

C++中,sort函数可以用来给指定区间内的数据按照某种规则排序。

qq_42499821的博客 1960

【FnOS飞牛云 | NAS存储】旧电脑不吃灰,手把手教你搭建完全属于自己的私人网盘

打造属于自己的NAS私人网盘,亲测有效,值得一试

木子Linux的博客世界 9421

Qt代码-软件商店

ui->statusBar->showMessage(QString("%1 已卸载").arg(app["name"].toString()));ui->statusBar->showMessage(QString("开始下载 %1...").arg(app["name"].toString()));QString("%1 已下载完成,是否立即安装?ui->statusBar->showMessage(QString("%1 下载完成").arg(app["name"].toString()));

寒寒豆豆软件公司的博客 111

C++ STL sort 函数的用法(自定义排序函数)

sort 在 STL 库中是排序函数,有时冒泡、选择等O(n2)O(n2)算法会超时时,我们可以使用 STL 中的快速排序函数O(nlogn)O(nlogn)完成排序 sort 在 algorithm 库里面,原型如下: template <class RandomAccessIterator> void sort ( RandomAccessIterator ...

积累点滴,保持自我 8200

Linux下驱动开发_块设备驱动开发(硬件上采用SD卡+SPI协议)

这一篇文章将采用SD卡作为存储硬件,利用SPI协议与SD卡通信,完成块设备驱动开发测试。 SD卡可以更加形象的表示块设备开发过程,明白硬件如何交互,完成数据读写。

2605

【用法学习】C++ pair用法及使用sort函数对pair数据进行排序

部分内容转载自:https://www.cnblogs.com/handsomecui/p/4946151.html 部分内容转载自:https://www.cnblogs.com/bigyang/p/8590552.html  pair 默认对first升序,当first相同时对second升序; 类模板:template &lt;class T1, class T2&gt; struct...

荷叶田田 4万+

uniapp:解决微信小程序包体积超过2M的优化方案+详解分包问题,编译小程序体积大于2M不能上传和预览提示体积太大的处理教程,uniApp微信小程序主包过大问题如何解决(排查可疑点+分包+最小改动)

uniapp微信小程序开发,如何解决打包太大无法预览发布的问题,uniApp微信小程序包体积超过2M的优化方法,uni-app打包微信小程序主包超2M终极解决方案,使用uniapp开发微信小程序使用uni_modules导致主包文件过大,无法发布的解决方法,UniApp开发的微信小程序主包过大问题及解决方案 编译小程序时Node-modules被打入主包,小程序体积大于2M不能上传和预览,怎么处理,解决微信小程序主包太大问题,微信小程序中主包和分包过大,详解分包问题,uni-app 微信小程序发布时,主包超

✅ 精选推荐文章 5066

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

原文章:https://www.cnblogs.com/stones-dreaC++ 中的sort()排序函数用法m/p/10183210.html sort(first_pointer,first_pointer+n,cmp) 该函数可以给数组,或者链表list、向量排序。 实现原理:sort并不是简单的快速排序,它对普通的快速排序进行了优化,此外,它还结合了插入排序和推排序。...

weixin_44411411的博客 685

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C++ sort排序函数用法

最近在刷ACM经常用到排序,以前老是写冒泡,可把冒泡带到OJ里后发现经常超时,所以本想用快排,可是很多学长推荐用sort函数,因为自己写的快排写不好真的没有sort快,所以毅然决然选择sort函数 用法 1、sort函数可以三个参数也可以两个参数,必须的头文件#include < algorithm>和using namespace std; 2、它使用的排序方法是类似于快排的方法,时间复

浅然的专栏 26万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~ 所以自己总结了一下,首先看sort函数见下表:     函数名 功能描述 sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 partial_sort 对给定区间所有元素部分排序

zhi_jin的博客 656

C++ sort()排序函数用法详解

#include<algorithm> sort() 1. 什么时候可以用sort()? (1)当你需要对array/vector/deque这三个STL容器或普通数组中指定范围内的元素进行排序时 (2)对于指定范围内相等的元素 他们的相对位置可以发生改变 (如果要求相同元素的相对位置不能发生改变,可以用stable_sort()排序函数) 2. sort()的2种用法 (1) 对 [ fir...

qq_53133234的博客 7118

C++ 中的sort()排序函数原理、用法看这一篇就够了

C++ 中的sort排序函数用法 sort(first_pointer,first_pointer+n,cmp) 该函数可以给数组,或者链表list、向量排序。 原理:sort并不是简单的快速排序,它对快速排序进行了优化。此外,它还结合了插入排序和推排序。系统会根据数据形式和数据量自动选择合适的排序方法。它每次排序中不只选择一种方法,比如给一个数据量较大的数组排序,开始采用快速排序,分段递归,分段之后每一段的数据量达到一个较小值后它就不继续往下递归,而是选择插入排序,如果递归的太深,他会选择推排序。 3个参

u014339447的博客 8万+

C++sort函数排序用法总结

主要内容 1.普通数组排序 2.结构体数组排序——实现结构体内部运算符"<“重载 3.结构体数组排序——额外指定新的结构体实现运算符”()"重载 4.结构体数组排序——实现自定义函数重载 5.sort对map的排序 具体使用 1.普通数组排序 sort(arr,arr+len); 默认从小到大,arr为数组名,指向首地址,arr+len为数组尾地址 sort(arr,arr+len,greater()); 从大到小 ,需要显示指定 #include<iostream> #include&l

qq_43521551的博客 1211

sort函数的用法(C++排序库函数的调用)

c++标准库里的排序函数的使用方法 I)Sort函数头文件 #include&lt;algorithm&gt; II)Sort函数有三个参数: 第一个是要排序的数组的起始地址。 第二个是结束的地址(最后一位要排序的地址) 第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。 Sort函数使用模板: Sort(start,en...

桑凯旋的博客 4265
上一篇: 自媒体平台运营的感悟
下一篇: 第三章:查找与排序(下)----------- 3.10 实战解题_哪个数字超过了一半?
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值