排序
程序员文章站
2022-05-12 17:26:38
...
#排序—sort()
使用方式:
(1)需要头文件#include和 using spacename std;
(2)sort(首元素的地址(必填),尾元素地址的下一个地址(必填),比较函数(非必填))
说明:比较函数------cmp
-------------如果不写比较函数,则默认对给出的区间进行递增排序
基本数据类型的排序:(int ,double,char)常见的
#include<cstdio>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int a[]={1,3,7,5};
sort(a,a+4,cmp);
for(int i=0;i<4;i++)
{
printf("%d ",a[i]);
}
return 0;
}
结构体数组的排序
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{
int x,y;
}ssd[6];
bool cmp(node a,node b)//按照x值从大到小对结构体数组进行排序,需要注意的是y的值会跟x位置的变化而变化
{
return a.x>b.y;
}
int main()
{
ssd[0].x=2;//{2,2}
ssd[0].y=2;
ssd[1].x=1;//{1,3}
ssd[1].y=3;
ssd[2].x=3;//{3,1}
ssd[2].y=1;
sort(ssd,ssd+3,cmp);
for(int i=0;i<3;i++)
{
printf("%d %d\n",ssd[i].x,ssd[i].y);
}
}
如果想先按照x的值由大到小进行排序,但是当x的值相等的情况下,按照y的大小从小到大来排序,那么cmmp的写法是:代码如下–
bool cmp(node a,node b)
{
if(a.x!=b.x)
{
return a.x>b.y;
}
else
{
return a.y<b.y;
}
}
容器的排序
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
vector<int> vi;
vi.push_back(3);
vi.push_back(1);
vi.push_back(2);
sort(vi.begin(),vi.end(),cmp);
for(int i=0;i<3;i++)
{
printf("%d ",vi[i]);
}
return 0;
}
字符串的排序
#include<algorithm>
#include<bits/stdc++.h>
#include<string>
using namespace std;
bool cmp(string a,string b)
{
return a>b;
}
int main()
{
string str[3]={"bbb","cc","aaa"};
sort(str,str+3,cmp);
for(int i=0;i<3;i++)
{
cout<<str[i]<<endl;
}
return 0;
}