- 外文名
- sort Function
- 头文件
- #include
- 所属范畴
- C++
- 用 途
- 对给定区间所有元素进行排序
- 中文名
- sort函数
- 功 能
- 升序、降序
-
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; }
-
Sort函数
2018-08-07 20:49:19sort函数的用法(C++排序库函数的调用) 对数组进行排序,在c++中有库函数帮我们实现,这们就不需要我们自己来编程进行排序了。 (一)为什么要用c++标准库里的排序函数 Sort()函数是c++一种排序方法之一,学会了...*
Sort
*函数
用途:对给定区间所有元素进行排序
头文件**#include<algorithm>**
sort函数的用法(C++排序库函数的调用) 对数组进行排序,在c++中有库函数帮我们实现,这们就不需要我们自己来编程进行排序了。 (一)为什么要用c++标准库里的排序函数 Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的 冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于 快排的方法,时间复杂度为n*log2(n),执行效率较高! (二)c++标准库里的排序函数的使用方法 I)Sort函数包含在头文件为#include<algorithm>的c++标准库中,调用标准库里的排序 方法可以不必知道其内部是如何实现的,只要出现我们想要的结果即可! II)Sort函数有三个参数: (1)第一个是要排序的数组的起始地址。 (2)第二个是结束的地址(最后一位要排序的地址的下一地址) (3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个 参数,此时默认的排序方法是从小到大排序。 Sort函数使用模板: Sort(start,end,排序方法) 下面就具体使用sort()函数结合对数组里的十个数进行排序做一个说明! 例一:sort函数没有第三个参数,实现的是从小到大 #include<iostream> #include<algorithm> using namespace std; int main() { int a[10]={9,6,3,8,5,2,7,4,1,0}; 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]={9,6,3,8,5,2,7,4,1,0}; 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; } 假设自己定义了一个结构体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; }
-
sort 函数
2016-04-05 23:29:10sort函数头文件是#include<algorithm>#include #include using namespace std; bool comp( const int a,const int b) { return a>b; } int main() { int a[5] = {1,2,4,3,5}; sort(a,a +sort函数头文件是#include<algorithm>
#include<iostream> #include<algorithm> using namespace std; bool comp( const int a,const int b) { return a>b; } int main() { int a[5] = {1,2,4,3,5}; sort(a,a + 5);//升序 for(int i = 0;i < 5; i++) cout<<" "<<a[i]; cout<<endl; sort(a,a + 5,comp);//降序 for(int i = 0;i < 5; i++) cout<<" "<<a[i]; cout<<endl; return 0; }
sort函数本身按升序排列。当然可以自己定义一个按降序。如代码。
这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是[a,b)。简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了,默认的排序方式是升序。如需要对数组t的第0到len-1的元素排序,就写sort(t,t+len);对向量v排序也差不多,sort(v.begin(),v.end());排序的数据类型不局限于整数,只要是定义了小于运算的类型都可以,比如字符串类string。
如果是没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数。比较函数是一个自己定义的函数,返回值是bool型,它规定了什么样的关系才是“小于”。想把刚才的整数数组按降序排列,可以先定义一个比较函数cmp: -
sort函数用法
2018-04-10 09:30:54sort函数是一个非常强大的排序函数用法如下://使用sort函数进行升序排序#include <stdio.h>#include <algorithm>//sort函数所在的函数库using namespace std;//sort所在的标准命名空间...sort函数是一个非常强大的排序函数
用法如下:
//使用sort函数进行升序排序
#include <stdio.h>
#include <algorithm>//sort函数所在的函数库
using namespace std;//sort所在的标准命名空间
int main()
{
int n;
int i;
int buffer[100];
while(~scanf("%d",&n))
{
for (i=0;i<n;i++)
scanf("%d",&buffer[i]);
sort(buffer,buffer+n);//快速排序升序方式
for (i=0;i<n;i++)
printf("%d ",buffer[i]);
printf("\n");
}}
//使用sort函数的重载方式进行降序排序
#include <stdio.h>
#include <algorithm>
using namespace std;
bool cmp(int x,int y)//重新定义排序方式,记住
{
return x>y;
}
void main()
{
int n;
int i;
int buffer[100];
while (~scanf("%d",&n))
{
for (i=0;i<n;i++)
scanf("%d",&buffer[i]);
sort(buffer,buffer+n,cmp);//sort函数的重载方式,cmp重新定义排序方式
for (i=0;i<n;i++)
printf("%d ",buffer[i]);
printf("\n");
}}
//用sort函数实现结构体数据的升序排序
//排序规则:
//1.分数升序排序
//2.分数相同,姓名升序排序
//3.分数姓名都相同,年龄升序排序
#include <stdio.h>
#include <algorithm>
using namespace std;
struct E
{
char name[101];
int age;
int score;
}buffer[100];
bool cmp(E a,E b)
{
if (a.score!=b.score)
return a.score<b.score;//分数不等,按分数递增排序
int tmp = strcmp(a.name,b.name);//strcmp是字符串比较函数,相等返回0,大于返回1,小于返回-1
if(tmp!=0)
return tmp<0;//分数相等,逆转字符串比较值,实现按姓名递增排序
else return a.age<b.age;//分数姓名都相等,按年龄递增排序
}
void main()
{
int n;
int i;
while (~scanf("%d",&n))
{
for (i=0;i<n;i++)
scanf("%s %d %d",&buffer[i].name,&buffer[i].age,&buffer[i].score);
sort(buffer,buffer+n,cmp);
for (i=0;i<n;i++)
printf("%s %d %d\n",buffer[i].name,buffer[i].age,buffer[i].score);
printf("\n");
}
}这里有更详细的解释:
-
python中sort函数的使用
2019-08-26 18:17:06转自...我们需要对List进行排序,Python提供了两个方法 对给定的List L进行排序, 方法1.用List的成员函数sort进行排序 方法2....sort函数定义:sort(cmp=None, key=None, rev... -
sort函数详细讲解
2020-08-19 12:07:33sort函数 简介 sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include < ...
-
微信H5支付.zip
-
PandoraBox-ralink-R9.9.8-mt7621-newifi-3-squashfs-sysupgrade-鸡血驱动.bin
-
MySQL 高可用(DRBD + heartbeat)
-
MySQL你该了解的那些事【服务端篇】
-
ELF视频教程
-
java 求一个数组中的最大值,并得到对应的下标
-
ELK环境搭建
-
基于电商业务的全链路数据中台落地方案(全渠道、全环节、全流程)
-
RapidScada从入门到精通
-
应云而生,幽灵的威胁 - 云原生应用交付与运维的思考
-
一天学完MySQL数据库
-
LHCM万汇:特斯拉跌跌不休,后期走势展望
-
Unity 热更新技术-ILRuntime
-
NSGA-3.zip
-
Spring-03 依赖注入(DI)
-
Python _Basic.pdf
-
NFS 实现高可用(DRBD + heartbeat)
-
网页缩略图 API
-
roadrunner-revb-schematic.7z
-
波士顿动力公司机器人组团跳舞?科研脑洞由此大开