C++排序函数sort
.基础使用
使用方法:
默认从小到大排序
sort(a+m,a+n); //(a+m.a+n)范围内的元素进行排序 a+m就是取地址
sort(a+m,a+n,cmp) //cmp是函数 或仿函数
样例
#include<iostream>
#include<algorithm>
using namespace std;
int a[100]={5,1,8,4,2,5,7,4,9,10}
int main()
{
sort(a+0,a+10); //数组名+数字的本质就是指针操作
for(int i=0;i<10;i++)
{
cout<<a[i];
}
return 0;
}
如果是从大到小排序.
#include<iostream>
#include<algorithm>
using namespace std;
int a[100]={5,1,8,4,2,5,7,4,9,10};
bool mycmp(int &a,int &b) //当为真的时候,第一个数字就放在前面
{
if(a>b)
return 1;
else
return 0;
}
int main()
{
sort(a+0,a+10,mycmp);
for(int i=0;i<10;i++)
{
cout<<a[i];
}
}
return 0;
}
使用仿函数
sort的第三个参数不仅可以传递函数的名字,还可以传递仿函数对象
#include<iostream>
#include<algorithm>
using namespace std;
int a[100]={5,1,8,4,2,5,7,4,9,10};
struct Big{
bool operator()(int a,int b)
{
return a>b;
}
};
int main()
{
sort(a,a+10,Big());
for(int i=0;i<10;i++)
{
cout<<a[i];
}
return 0;
}
c++内置了两个比较大小的仿函数 less , greater分别进行大小的比较。
例如,我们可以直接用 greater 来实现从大到小排序,不用自己写仿函数了。
#include<iostream>
#include<algorithm>
using namespace std;
int a[100]={5,1,8,4,2,5,7,4,9,10};
int main()
{
sort(a,a+10,greater<int> ());
for(int i=0;i<10;i++)
{
cout<<a[i];
}
return 0;
}
对结构体进行排序
结构体不能直接比较大小,可用三种方法实现大小排序
1.大小比较函数
2.重载 < 号
3.仿函数
下面用重载< 号来实现排序
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int a,b;
//重载<
bool operator<(node B)
{
if(a!=B.a)
return a<B.a;
else
return b<B.b;
}
};
node a[10]={
{2,3},
{10,10},
{5,5},
{4,4},
{10,4}.
{7,1},
{10,10},
{4,6},
{10,7},
{2,8}
};
int main()
{
sort(a,a+10);
for(int i=0;i<10;i++)
{
cout<<a[i].a<<a[i].b;
}
return 0;
}