2021-05-02

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]={
     {23},
     {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;     
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FG.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值