- 外文名
- sort Function
- 头文件
- #include
- 所属范畴
- C++
- 用 途
- 对给定区间所有元素进行排序
- 中文名
- sort函数
- 功 能
- 升序、降序
-
2020-07-17 17:39:43
sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高。
使用sort函数需要用到头文件:#include <algorithm>
1、sort函数介绍:
sort()函数的强大之处在于可以选择排序方法。sort(start, end, cmp);
(1)start表示要排序数组的起始地址;
(2)end表示数组结束地址的下一位;
(3)cmp用于规定排序的方法,可不填,默认升序。例如:对数组a[10]排序,用法为sort(a, a+10)。
2、sort函数用法
(1)没有cmp函数时,sort为升序。(2)若想降序排序,应有下面函数:
bool cmp(int a, int b){ return a > b; }
这就是告诉程序要实现从大到小的排序的方法!
(3)可对结构体进行排序。
假设自己定义了一个结构体node: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; }
资料来源于:
https://baike.baidu.com/item/getline%E5%87%BD%E6%95%B0/3932106?fr=aladdin
https://baike.baidu.com/item/sort%E5%87%BD%E6%95%B0/11042699?fr=aladdin更多相关内容 -
sort函数
2019-09-13 23:20:353、sort函数有三个参数: (1)要排序数组的起始地址 (2)要排序数组的最后一个数据元素的下一个地址 (3)排序方法,如果没有排序方法的话,默认从小到大排序 二、实例 1、sort函数实现数的排序 #...一、简介
1、头文件:#include<algorithm>
2、时间复杂度:类似于快排,为nlog(2)n,效率较高
3、sort函数有三个参数:
(1)要排序数组的起始地址
(2)要排序数组的最后一个数据元素的下一个地址
(3)排序方法,如果没有排序方法的话,默认从小到大排序
二、实例
1、sort函数实现数的排序
#include<cstdio> #include<iostream> #include<cstdlib> #include<algorithm> using namespace std; bool cmp(int a,int b)///实现从大到小排序的比较函数 { return a>b; } int main() { int i,j; int arr[10]={1,33,56,74,34,34,555,43,43,343}; sort(arr,arr+10,cmp); for(i=0;i<10;i++) cout<<arr[i]<<" "<<endl; return 0; }
2、sort函数实现字符串的排序(根据长度,字母顺序两种情况)
(1)sort函数对string内的字符进行排序(string为字符串类型数据)
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; bool cmp(char a,char b)///比较函数 { return a>b; } int main() { string s; cin>>s; sort(s.begin(),s.end());///从小到大 cout<<s<<endl; sort(s.begin(),s.end(),cmp);///从大到小 cout<<s<<endl; cout<<s.length()<<endl;///字符串长度函数 }
(2)sort对一维字符数组内的字符进行排序
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; bool cmp(char a,char b)///比较函数 { return a>b; } int main() { char a[100]; scanf("%s",a); sort(a,a+strlen(a));///从小到大 cout<<a<<endl; sort(a,a+strlen(a),cmp);///从大到小 cout<<a<<endl; cout<<strlen(a)<<endl;///输出字符数组a的长度 }
(3)sort对string类型的数组按照字典序排序
#include<cstdio> #include<iostream> #include<cstdlib> #include<algorithm> #include<cstring> using namespace std; bool cmp(string a,string b)///按照字典序从大到小排序 { return a>b; } int main() { int i,j; string s[12]= { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; sort(s,s+12);///字符串默认按照字典序从小到大排序,数默认按照大小从小到大排序 for(i=0;i<12;i++) cout<<s[i]<<endl; cout<<endl; sort(s,s+12,cmp);///按照字典序从大到小排序 for(i=0;i<12;i++) cout<<s[i]<<endl; return 0; }
(4)sort对char类型的二维数组进行字典序排序
错误,不能这样做。同样也不能进行根据字符串长度的排序
解决方法有:1、使用qsort 2、改用string
(5)sort对string类型的数组根据长度进行排序
#include<cstdio> #include<iostream> #include<cstdlib> #include<algorithm> #include<cstring> using namespace std; bool cmp1(string a,string b)///按照长度从小到大排序 { return a.length()<b.length(); } bool cmp2(string a,string b)///按照长度从大到小排序 { return a.length()>b.length(); } int main() { int i,j; string s[12]= { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; sort(s,s+12,cmp1);///按照长度从小到大排序 for(i=0;i<12;i++) cout<<s[i]<<endl; cout<<endl; sort(s,s+12,cmp2);///按照长度从大到小排序 for(i=0;i<12;i++) cout<<s[i]<<endl; return 0; }
6、对结构体数组进行排序(根据结构体中的某元素)
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; const int n=3; struct Student { char name[20];///姓名 char id[20]; ///学号 int score; ///成绩 int r; ///排名 }stu[100010]; /* (1)如果两个学生的分数不同,则分数高的排在前面 (2)否则,将姓名字典序小的排在前面 */ bool cmp(Student a,Student b) { if(a.score!=b.score) return a.score>b.score; else return strcmp(a.name,b.name)<0; } /* 排名的实现,一般规则为:分数不同,排名不同,分数相同排名相同但占用同一个排位 例如:分数为90,88,88,88,86;排名为1,2,2,2,5 */ void Rank() { int i,j; stu[0].r=1; for(i=1;i<n;i++) { if(stu[i].score==stu[i-1].score) stu[i].r=stu[i-1].r; else stu[i].r=i+1; } } int main() { int i,j; stu[0]={"guo","001",82,3};///这样赋值不对,算了,以后再改吧 stu[1]={"zhang","002",82,3}; stu[2]={"wu","003",99,2}; sort(stu,stu+n,cmp); for(i=0;i<n;i++) cout<<stu[i]<<endl; }
-
C++ Sort函数详解
2022-06-06 22:12:06C++sort函数介绍、案例,自定义排序方法。C++ Sort函数详解
前言 :sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使用
stable_sort
函数,这里不过多介绍。一、sort函数调用的两种方式
方式一(默认) void sort (RandomAccessIterator first, RandomAccessIterator last); 方式二(自定义) void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp); -
默认: 两个参数
first
,last
,将[first, last)
区间内元素升序排列。【注意区间为左闭右开】 -
自定义排序: 需用户指定排序规则
Compare comp
,将[first, last)
区间内的元素按照用户指定的顺序排列。
二、sort函数使用场景
由于在排序过程中涉及到元素交换等操作,所以sort函数仅支持可随机访问的容器,如数组, string、vector、deque等。
三、sort函数排序原理
sort()
并非只是普通的快速排序,除了对普通的快速排序进行优化,它还结合了插入排序和堆排序。根据不同的数量级别以及不同情况,能自动选用合适的排序方法。当数据量较大时采用快速排序,分段递归。一旦分段后的数据量小于某个阀值,为避免递归调用带来过大的额外负荷,便会改用插入排序。而如果递归层次过深,有出现最坏情况的倾向,还会改用堆排序。 所以无论元素初始时为何种状态,
sort()
的平均排序复杂度为均为O(N*log2(N)) ,具有不错的的性能,在刷算法题时,可以直接使用sort()来对数据进行排序,而不需手动编写排序函数。四、sort函数使用案例
1.升序排列
sort函数如果不传入第三个参数,则默认是升序排列。
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { // 方式一、使用数组 int a[10] = {9, 6, 3, 8, 5, 2, 7, 4, 1, 0}; sort(a, a + 10); // 10为元素个数 for (int i = 0; i < 10; i++) cout << a[i] << ' '; // 输出排序后数组 cout << endl; // 方式二、使用 vector vector<int> arr = {9, 6, 3, 8, 5, 2, 7, 4, 1, 0}; sort(arr.begin(), arr.end()); // 10为元素个数 for (int i = 0; i < 10; i++) cout << arr[i] << ' '; // 输出排序后数组 return 0; }
2.降序排列
- 实现方式1
实现降序排列,需传入第三个参数–比较函数,
greater<type>()
,这里的元素为int
类型,即函数为greater<int>()
; 如果是其他基本数据类型如float
、double
、long
等也是同理。#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { // 方式一、使用数组 int a[10] = {9, 6, 3, 8, 5, 2, 7, 4, 1, 0}; sort(a, a + 10, greater<int>()); // 10为元素个数 for (int i = 0; i < 10; i++) cout << a[i] << ' '; // 输出排序后数组 cout << endl; // 输出 9 8 7 6 5 4 3 2 1 0 // 方式二、使用 vector vector<int> arr = {9, 6, 3, 8, 5, 2, 7, 4, 1, 0}; sort(arr.begin(), arr.end(), greater<int>()); for (int i = 0; i < 10; i++) cout << arr[i] << ' '; // 输出排序后数组 return 0; }
- 实现方式2
我们也可以使用自定义的比较函数,函数的返回值为
bool
类型, 例如bool cmp(int num1, int num2) { return num1 > num2; // 可以简单理解为 > 降序排列; < 升序排列 }
#include<iostream> #include<vector> #include<algorithm> using namespace std; bool cmp(int num1, int num2) { return num1 > num2; // 可以简单理解为 >: 降序排列; < : 升序排列 } int main() { // 一、使用数组 int a[10] = {9, 6, 3, 8, 5, 2, 7, 4, 1, 0}; sort(a, a + 10, cmp); // 使用自定义排序函数 for (int i = 0; i < 10; i++) cout << a[i] << ' '; // 输出排序后数组 cout << endl; // 输出 9 8 7 6 5 4 3 2 1 0 // 二、使用 vector vector<int> arr = {9, 6, 3, 8, 5, 2, 7, 4, 1, 0}; sort(arr.begin(), arr.end(), cmp); // 使用自定义排序函数 for (int i = 0; i < 10; i++) cout << arr[i] << ' '; // 输出排序后数组 return 0; }
3.结构体排序(自定义比较函数)
要对元素进行排序,前提是元素之间可以进行比较,即谁大谁小。 基本数据类型可直接进行大小比较, 但结构体元素之间的大小关系需要我们自己指定,如果不指定,则结构体之间大小关系就不确定,则不能够排序。
结构体排序案例1: 对学生信息进行排序
学生有
姓名
,分数
两个属性,struct Student { // 学生结构体 string name; // 学生姓名 int grade; // 学生分数 Student(); // 无参数构造函数 Student(string name, int grade) : name(name), grade(grade) {}; // 有参数构造函数 };
需求: 对一个班级内的学生成绩进行排序,首先按成绩进行排序降序排列,若成绩相同,则按照姓名字典顺序升序排列。
- 自定义排序函数
bool cmp(Student s1, Student s2) { // 自定义排序 if (s1.grade != s2.grade) { // 如果学生成绩不相同 return s1.grade > s2.grade; // 则按照成绩降序排列 } return s1.name < s2.name; // 否则按照姓名升序排列 }
- 排序代码
#include<iostream> #include<vector> #include<algorithm> using namespace std; struct Student { // 学生结构体 string name; // 学生姓名 int grade; // 学生分数 Student(); // 无参数构造函数 Student(string name, int grade) : name(name), grade(grade) {}; // 有参数构造函数 }; bool cmp(Student s1, Student s2) { // 自定义排序 if (s1.grade != s2.grade) { // 如果学生成绩不同 return s1.grade > s2.grade; // 则按照成绩降序排列 } return s1.name < s2.name; // 否则按照姓名升序排列 } int main() { vector<Student> studs; studs.emplace_back("Bob", 80); studs.emplace_back("Ali", 90); studs.emplace_back("Ann", 85); studs.emplace_back("Liming", 90); studs.emplace_back("Trump", 79); studs.emplace_back("Fury", 58); studs.emplace_back("Jam", 62); studs.emplace_back("Lucy", 89); sort(studs.begin(), studs.end(), cmp); // 排序 for (int i = 0; i < studs.size(); i++) { // 输出结果 cout << studs[i].name << "\t" << studs[i].grade << endl; } return 0; }
五、自定义comp函数返回true或false作用
bool cmp(int num1, int num2) { // 实现降序排列 return num1 > num2; // num1大于num2时返回true,否则返回false }
自定义函数返回值为
bool
类型- 若返回
true
,则表示num1
与num2
应该交换顺序; - 若返回
false
, 则num1
与num2
保持原有顺序;
下面举例说明自定义比较函数的执行过程。
对 2, 5, 1, 3, 4 降序排列 调用cmp函数时,将5赋值给num1, 2赋值给num2 (注意顺序) 5 > 2, 返回true,num1 与 num2需进行交换;即5应该在2的前面 数组变为 5, 2, 1, 3, 4 第二次 将3赋值给num1, 1赋值给num2, 3 > 1, 返回true,num1 与 num2需进行交换;即3应该在1的前面 数组变为 5, 2, 3, 1, 4 之后经过数次的比较与交换最终排序完成。 最终得到 5 4 3 2 1
六、参考文章链接
https://www.cplusplus.com/reference/algorithm/sort/
https://blog.csdn.net/qq_41575507/article/details/105936466
胡凡算法笔记
-
-
c++ sort函数使用总结
2018-10-24 12:25:15c++ sort函数的使用总结(sort,stable_sort,partial_sort……) -
Sort()函数的多种用法
2020-09-02 15:05:54sort() 方法用于对数组的元素进行排序。接下来通过本文给大家介绍Sort()函数的多种用法,对sort函数的用法相关知识感兴趣的朋友一起学习 -
python sort函数原理
2021-03-17 02:22:15python sort()用法一个字典 adic = {1:98,2:12,3:78} 对这个排序: alist= [] for i in adPython中的sort()方法用于数组排序,下面以实例形式对此加以详细说明: 一、基本形式 列表有自己的sort方法,其对列表进行...python sort()用法
一个字典 adic = {1:98,2:12,3:78} 对这个排序: alist= [] for i in adPython中的sort()方法用于数组排序,下面以实例形式对此加以详细说明: 一、基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。 x = [4, 6, 2, 1, 7, 9]x.sort()prin
python中,sort函数是按照什么方式排序的?sorted...a.sort是对a进行排序,返回None,sorted(a)返回一个排好序的副本,a不变。请多看看相关教程。
关于python里sort的疑问
在网上看到这么几段代码,有些疑惑。 >>> a=range(10) >>> b=a[::-1] >>例1 c是一个list,list中的每一个元素都是一个tuple,如c[0]=(0,9), c[1]=(1,8) key的作用是指定待排序list(此处即C)中的元素中用来作为排序依据的属性 上例中的key为匿名方法,分别以c[i][0], 和 c[i][1] 作为排序依据。
python3没有了Cmp函数,自定义的排序sort方法不是那关键字参数key和reverse还在吗?我是python3.3.5的。
自定义排序用key关键字 >>> a=['abc','abcd','ab'] >>> a.sort(key=len) #使用len函数返回的大小排序 >>> a ['ab', 'abc', 'abcd'] key和reverse是有的。
python的一个sort函数不知道哪里错了。
Python初级 sort以及数组和函数的用法
就想知道key=lo, 为什么lo没有参数, 还有为什么是按照输出结果的那种排>>>为什么不用参数? pairs.sort(key=lo) 是将整个pairs迭代后每一次迭代的值都会传入lo. >>>为什么是按照输出结果的那种排序方式 lo函数返回的pair[1],也就是在迭代pairs是传入的(1,“one”)中的"one" 所以按照字母顺序排序的。
python中,sort()函数用来排序,但是如果被排的...例如对1,3,'a'排序
1,3,a 主要根据asc码排序,1和3属于int类型,a属于str类型,i的asc码在s前面,所以先排数字,然后1排在3前面没有什么疑问了吧。
用python语言实现matlab中的sort函数功能
matlab中的sort函数[Y,I]=sort(A),返回的Y矩阵是排序结果、I矩阵是排序A是要排序的矩阵,1是维度,就是说是按列排序还是按行排序,1是按列排序,'descend'是降序排列。
python怎么使用sort
Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一、基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。 x = [4, 6, 2, 1, 7, 9] x.sort() pr
请教如何用python按字母顺序排序英文名字但是不可代码如下: list = ['banana', 'apple', 'orange', 'blueberry', 'watermelon', 'strawberry', 'mango'] print(list) list.sort() #根据字母顺序排序 print(list) #['apple', 'banana', 'blueberry', 'mango', 'orange', 'strawberry', 'waterme
-
C++中sort函数详解
2020-10-29 17:37:58sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include的c++标准库中 1.sort的参数 sort(start,end,cmp) start:表示排序数组起始的位置 end:表示排序数组结束的... -
Python sort 函数
2021-07-02 00:47:181. sort 函数 函数原型: L.sort(*, key=None, reverse=None) 它把 L 原地排序,也就是使用后并不是返回一个有序的序列副本,而是把当前序列变得有序! 参数说明: argument description * 迭代类型的数据... -
C++中sort函数
2021-05-09 14:46:06首先,C++中使用sort函数的时候需要加上头文件#include<algorithm>。 并且sort函数的语法格式为: void sort (RandomAccessIterator first, RandomAccessIterator last); 也可以自定义排序规则comp void sort... -
C/c++语言sort函数如何使用
2021-05-22 03:06:15头文件是#include比如说数组a[5]={1,5,4,2,3};当你用sort(a,a+5)时,就把...如果在C语言中,遇到有调用sort函数,就是自定义的一个函数,功能一般用于排序。一、可以编写自己的sort函数。如下函数为将整型数组从小... -
js 的 sort 函数
2021-07-22 17:32:31本文主要是我对 js sort() 函数的一些疑问,和解决思路 一、sort 函数的使用 1.1 使用 默认情况下,sort()会按照由小到大重新排列数组元素。 2.1问题 但是,sort()会在每一项上调用 String()来转型函数(返回表示相应... -
sort函数详细讲解
2020-08-19 12:07:33sort函数 简介 sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include < ... -
matlab sort函数
2019-07-28 16:11:07一起来学演化计算-matlab基本函数sort 觉得有用的话,欢迎一起讨论相互学习~Follow Me sort 对数组元素排序 语法 B = sort(A) 按照大小不等于1的第一个数组维度对A的元素按升序排序 如果A是一个向量,那么sort(A)... -
【C++】sort函数详解
2022-03-12 13:33:58sort函数详解 -
Python 列表sort函数
2021-04-26 21:07:21文章目录简介一、语法二、演示1.基本用法2.有参用法总结 简介 Python和Java等编程语言一样,提供了一种自动排序的方法,Java中...(2)cmp为函数,指定排序时进行比较的函数,可以指定一个函数或者lambda函数 下面进.. -
sort函数(c语言排序)
2022-01-09 21:01:01使用该函数需要头文件 #include<...sort函数(biubiu使用举例)_张立龙666的博客-CSDN博客题目描述:给定你一个长度为n的整数数列,请你使用快速排序对这个数列按照从小到大进行排序,并将排好序的数列按顺序输出... -
sort函数自定义排序
2020-12-15 18:09:29sort函数自定义排序 咳咳,自定义排序说实话用的地方还是很多的,像ACM里面,天梯赛里面,特别是天梯,必出这玩意。。。咳咳,水点字数,咱继续。 首先哈,我们来看一下c++自带的排序; 可以看出哈,默认是按... -
c++中sort函数的的使用方法,超级详细
2022-03-26 16:36:16首先,我们经常会在一些算法场景中使用到排序功能,但是很多时候我们手写一个冒泡或者快排的话,每次需要用到就需要手写一边这个代码就很痛苦,而且效率低下,其实c++大的STL模板库为我们提供了sort函数,sort函数是... -
Sort函数
2018-08-07 20:49:19sort函数的用法(C++排序库函数的调用) 对数组进行排序,在c++中有库函数帮我们实现,这们就不需要我们自己来编程进行排序了。 (一)为什么要用c++标准库里的排序函数 Sort()函数是c++一种排序方法之一,学会了... -
sort函数和swap函数
2022-01-29 22:10:511.sort函数 sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高。 #include<bits/stdc++.h> using ... -
sort函数中的cmp函数使用
2020-11-14 20:02:07sort函数中的cmp函数使用 在leetcode上面刷题的时候发现大家使用sort函数的时候总能用出一些与众不同的比较方式,其中使用cmp自己定义排序放的非常的方便,因此我们这里记录一下cmp的使用。 首先我们先来看一下最... -
C++中sort函数使用方法
2021-02-28 11:48:00一.sort函数 sort函数包含在头文件为#include的c++标准库中,调用标准库里的排序方法可以实现对数据的排序。 sort函数的模板有三个参数: void sort (RandomAccessIterator first, RandomAccessIterator last,... -
c语言数组用sort函数排序?
2021-05-18 16:19:18c语言运用sort 排序函数,需要的头文件是什么?sort不属于C语言的标准函数,所以也没有相应的头文件,但是可以自定义。 sort 函数为将整型数组从小到大排序。 voidsort(int*a,intl)//a为数组地址,l...sort函数用法... -
C++中SORT函数使用方法
2020-08-06 09:30:50一.sort函数 1.sort函数包含在头文件为#include的c++标准库中,调用标准库里的排序方法可以实现对数据的排序,但是sort函数是如何实现的,我们不用考虑! 2.sort函数的模板有三个参数: void sort ... -
如何使用python sort函数?
2021-01-11 21:01:22与sort()函数相对应的必须要提到sorted()函数啦~结合着两个函数跟大家叙述。(1)使用范围不一样只有当对象是列表时,才能调用sort()方法,而sorted()是全局函数,可作用于所有可迭代对象。(2)返回结果... -
C++ sort函数的用法
2021-05-24 17:24:30sort函数是C++的一种排序方法,包含在头文件为#include的C++标准库中 sort函数使用模板: sort(start,end,排序方法) 一.sort函数没有第三个参数,此时默认由小到大排序 #include<iostream> #include<... -
java中sort函数的使用
2020-09-24 09:13:12java中sort函数的使用写在前面 写在前面 想必大家都知道C++里面的sort用过的都知道这个函数是绝对好用,不开玩笑,什么冒泡,快排,二分啊,讲真的还是sort是真的香。但是java里面也有sort函数只不过使用方式有些... -
sort函数用法
2018-04-10 09:30:54sort函数是一个非常强大的排序函数用法如下://使用sort函数进行升序排序#include <stdio.h>#include <algorithm>//sort函数所在的函数库using namespace std;//sort所在的标准命名空间... -
sort函数与结构体
2018-08-23 11:11:52对于排序来说,c++的sort函数用着还是相当方便的,比什么冒泡排序,快速排序简单方便了很多。 sort函数的头文件是#include<algorithm> sort函数默认的排序方式是升序排序,即从小到大。 sort...