c++入门必学库函数 sort
创始人
2024-01-18 14:03:14

一、sort 的介绍

sort是c++ algorithm 库里的一个排序函数。排序太常用了,如果每次都要自己写排序函数的话会浪费程序员大量的时间和精力,所以函数库里就写好了一些排序算法以供我们使用。

sort()是不稳定的排序,底层使用的是快速排序算法,平均时间复杂度为O(n*log n)

如果需要稳定排序可以使用stable_sort(),底层使用归并排序实现的,时间复杂度固定是O(n*log n)

sort()和stable_sort()用法是一样的,下面我们只讲解sort()的使用

二、sort的基本用法

sort(起始地址,末尾地址+1);
sort(起始地址,末尾地址+1,cmp);

sort是默认升序排序的,如果需要自定义排序,可以写一个比较函数,用第二种方法排序

1、普通数组的排序

示例代码:

#include
#include //使用sort等算法函数需要的头文件 
using namespace std;
void print(int a[]){//打印函数 for(int i=0;i<10;i++){cout<//大于号是升序排序,小于号是降序排序 return a1>a2;
}int main(){int a[10]={3,1,4,5,8,0,9,2,7,6};cout<<"排序前:"<

运行结果:

排序前:
3 1 4 5 8 0 9 2 7 6sort(a,a+10)排序后:
0 1 2 3 4 5 6 7 8 9sort(a,a+10,cmp)自定义降序排序后:
9 8 7 6 5 4 3 2 1 0

2、结构体的排序

因为结构体默认是没有比较大小的功能的,所以我们必须使用cmp函数定义排序方法

示例代码:

#include
#include //使用sort等算法函数需要的头文件 
using namespace std;
struct test{int a;int b;
}; bool cmp1(test t1,test t2){//先按a升序排序,再按b升序排序 if(t1.a==t2.a){return t1.b//先按a降序排序,再按b降序排序 if(t1.a==t2.a){return t1.b>t2.b;}return t1.a>t2.a;
}void print(test t[]){for(int i=0;i<5;i++){cout<<"t["<test t[5];t[0].a=2;t[0].b=3;t[1].a=5;t[1].b=3;t[2].a=5;t[2].b=2;t[3].a=2;t[3].b=8;t[4].a=1;t[4].b=1;cout<<"排序前:"<

运行结果:

排序前:
t[0](2,3) t[1](5,3) t[2](5,2) t[3](2,8) t[4](1,1)sort(a,a+5,cmp1)自定义升序排序后:
t[0](1,1) t[1](2,3) t[2](2,8) t[3](5,2) t[4](5,3)sort(a,a+5,cmp2)自定义降序序排序后:
t[0](5,3) t[1](5,2) t[2](2,8) t[3](2,3) t[4](1,1)

3、vector等数据结构的排序

像vector和string等数据结构,我们排序时是不能像数组那样直接用名字代表地址来排序的,而必须使用它们的迭代器begin()和end()来完成排序

示例代码:

#include
#include //使用vector容器需要使用这个头文件 
#include //使用sort等算法函数需要的头文件 
using namespace std;print(vector v){//打印函数 for(int i=0;icout<vector v;//定义一个int型的vector v.push_back(2);//在尾部插入一个元素2 v.push_back(3);//在尾部插入一个元素3v.push_back(7);v.push_back(1);v.push_back(9);v.push_back(8);v.push_back(0);v.push_back(5);v.push_back(4);cout<<"排序前:"<

运行结果:

排序前:
2 3 7 1 9 8 0 5 4sort(v.begin(),v.end())升序排序后:
0 1 2 3 4 5 7 8 9sort(v.rbegin(),v.rend())降序排序后:
9 8 7 5 4 3 2 1 0

当然,vector等结构都是可以用cmp函数自定义排序方法的,感兴趣的同学可以尝试一下,这里就不在叙述了,因为都是大同小异的。学会举一反三学习效率才会高

加油!!兄弟萌

点个赞呗

上一篇:重读鲁迅《药》的书名后

下一篇:优怀

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
苁蓉的食用方法 鲜苁蓉的吃法有... 肉苁蓉号称“温而不热,补而不峻,暖而不燥,滑而不泄,故有从容之名。”历来也是传统药食同源的滋补佳品。...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
阳澄湖在哪里哪个省的 阳澄湖是... 点击题目下方苏州生活指南有用 有趣 有态度近期的阳澄湖度很高,3月24日,央视二套《第一时间》直播连...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...