Sort()函数用法:比较函数写法

2023-10-30

sort 函数

sort函数可以三个参数也可以两个参数,必须包含头文件

#include < algorithm>
using namespace std; 

它使用的排序方法是类似于快排的方法,时间复杂度为o(nlog(n))

Sort函数有三个参数:(第三个参数可不写)
(1)第一个是要排序的数组的起始地址。
(2)第二个是结束的地址(最后一位要排序的地址)
(3)第三个参数是排序的方法,可以是「降序」也可是「升序」,
第三个参数可省略,此时默认的排序方法是「升序」排序。

两个参数用法

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
 int a[20]={2,4,1,23,5,76,0,43,24,65},i;
 for(i=0;i<20;i++)  cout<<a[i]<<endl;
 sort(a,a+20);
 for(i=0;i<20;i++) cout<<a[i]<<endl;
 return 0;
}

输出结果是升序排列。(两个参数的sort默认升序排序)

三个参数用法

sort(arr.begin(),arr.end(),compare);
可以通过编写compare函数改变Sort的排序规则。

降序

bool compare(int a,int b){
  return a>b; //降序排列,如果改为return a<b,则为升序
}
 int a[20]={2,4,1,23,5,76,0,43,24,65},i;
 sort(a,a+20,compare);

}
绝对值排序

#include <cmath>
 bool compare(int a, int b){
    return abs(a) > abs(b);
}

结构体排序

struct node{
    int u, v, w;
};
bool cmp(node a, node b){
    if(a.w < b.w ) //按照w的值进行的是:升序排列 !
        return true;
    else return false;
}

//还可以这样写

bool cmp(node a, node b)
{
    return a.w<b.w; //升序
}

当然cmp函数也可以写的稍微复杂点,也就是说,按照优先级对结构体的多个成员按照某种规则排序
//先按照w的值升序排序,如果w相等,再按照v的值升序排序

bool cmp(node a, node b)
{
   if(a.w==b.w)
       return a.v<b.v;
   else
       return a.w<b.w;
}

//或者这样写

bool cmp(node a, node b){
    if(a.w<b.w)
        return true;
    if(a.w==b.w && a.v<b.v )
        return true;
    return false;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sort()函数用法:比较函数写法 的相关文章

  • java(条件分支语句)

    Java中的条件分支语句分两种 if else语句和switch语句 1 if 条件判断语句 代码A 当条件成立时执行代码A 如果条件不成立则不执行代码A 而是直接 执行if的下一句 if 条件 代码块1 else 代码块2 当条件成立时执
  • vscode git 源代码管理 无法自动更新显示变更

    最近vscode 远程写代码遇到问题 git的源代码管理不能自动罗列被修改的文件 原因 早期出现警告 Visual Studio Code is unable to watch for file changes in this large
  • 蓝牙HID说明

    蓝牙HID说明 本章主要围绕BLE的HOGH进行说明 网上很多文档讲到HID都要说到USB的HID 让初学者一开始既要看理解蓝牙GATT Service的概念 又要去理解USB的端点概念 实话来说本人刚去学习时也经常需要尝试去理解这两者的关
  • hystrix详述(2)- 配置

    一 hystrix在生产中的建议 1 保持timeout的默认值 1000ms 除非需要修改 其实通常会修改 2 保持threadpool的的线程数为10个 除非需要更多 3 依赖标准的报警和监控系统来捕获问题 4 通过dashboards
  • 快应用-华为市场快应用审核总是不通过,无法复现华为审核时的bug【经验贴】

    最近完成了一个快应用项目 在提交各个市场审核的时候 除了华为市场总是不过 其他市场 vivo oppo 小米 等 都很快通过了审核 最让人恼火的是 华为反馈的bug内容 我们尝试各种方法都无法复现 无法复现bug就很难定位修改 修改bug全
  • 微信小程序 一键授权 给第三方平台代开发管理(二,一键授权给第三方平台)

    不是重点 可以忽略 本人 七月的胜利 代表七月份我出生啦 嘻嘻 博客就是平常记录一些常用到的开发常用到的技术 方法等 看见好东西了就自己整理一下防止以后自己遇到了再找不到 如果有幸帮到你 欢迎点赞 评论 留言 Thank you 一 创建第
  • linux设置交换内存

    查看是否有交换空间 cat proc swaps free h 创建swapfile空间 sudo fallocate l 32G swapfile ls lh swapfile 设置空间权限 sudo chmod 600 swapfile
  • 如何使你的网页视频自动播放嵌入的iframe视频

    只需在视频链接后面接上 rel 0 amp autoplay 1
  • <Linux内核学习>文件系统

    环境 Linux 0 11 Linux 3 4 2 参考书籍 Linux内核完全剖析基于0 11内核 赵炯 一 Linux中使用文件系统的部分 1 1关于Linux中高速缓冲区的管理程序 1 2文件系统的底层通用函数 对于硬盘的读写 分配释
  • 程序员分哪几种,分别薪资是多少

    这是本文的目录 前言 程序员的类别 程序员的薪资一般是多少 这里着重介绍一下python程序员 python副业介绍 1 兼职处理数据 2 兼职查询资料 3 兼职P图 零基础Python学习资料介绍 附上Python学习指南 零基础Pyth

随机推荐