当前位置: 首页 > news >正文

c++_sort函数

sort介绍

在C/C++中,要想应用排序算法,可以使用c语言的qsort,也可以使用c++的sort 。

1)qsort 是 C 标准库提供的一个通用排序函数,位于 stdlib.h 头文件中。

qsort 适用于 C 语言中的数组。

2)sort 是 C++ 中STL的泛型算法(即函数)

sort可以排数组,vector(以及其他的容器)

sort可以自定义排序规则。

引入:

#include<algorithm>

排静态数组

c语言中 arr是一个数组名 作为函数参数时会退化成数组中第一个元素的地址

即arr==>&arr[0],即由数组退化为一个指针;指针即可做加减乘除运算

sort函数的参数需要传入两个地址,如下列所示:

int arr[6]={2.4,6,1,3,5};
/*第一个参数填起始地址
第二个参函数填最后一个元素的后一个位置的地址*
即区间是左闭右开/
sort(arr,arr+6);

排动态数组

因为vector想表示位置得使用迭代器。

所以sort函数的参数使用两个迭代器

#include<vector>
​
vector<int> vec={2,3,5,1,4};
sort(vec.begin(),vec.end());

sort函数重载理解

上面的两个例子中,sort的参数使用了指针,也可以使用迭代器;

实际上这运用了c++语法中的函数重载,即不同的函数使用同一个名字;

自定义比较规则

sort的底层是快速排序实现的。

这是一个基于比较的排序;从而必然会存在这样的逻辑:

if(lhs比较rhs){
    不交换
}else{
    交换
}

其中lhs比较rhs默认是lhs<rhs;

若想要自定义比较和规则,我们可以自己写个函数,但该函数必须满足:有2个参数,返回值为bool

举例:怎样把升序排序定义成降序的排序呢?

先实现比较函数

bool compare(int lhs,int rhs){
    return lhs>=rhs;
}

从而便可使用它:

vector<int> vec={2,3,5,1,4};
sort(vec.begin(),vec.end(),compare);

这样,数组就会按照降序排序了。

从而,我们可以知道,我们要想自定义比较规则,只需要设计compare函数的实现就可以了。

compare函数的设计

compare函数设计首先要遵循一些要求:

1.两个参数,类型和容器一致

2.返回值为bool

3.函数名不重要,保持和sort的第三个参数一致

4.当lhs和rhs不会发生交换时,要返回真;

例如:升序排序时,左边小于右边不能交换,故当左边<右边时,就要返回真;

相关文章:

  • Spark基础篇-Application、Job、Stage 和 Task
  • 川翔云电脑优势总结
  • 三菱FX5U PLC工字轮排线算法(ST源代码)
  • LVS+Keepalived高可用群集配置案例
  • 跟着AI学vue第十三章
  • DeepSeek-OpenSourceWeek-第四天-Optimized Parallelism Strategies
  • wpf中如何让TextBox 显示字体的颜色为白色
  • Vue 3 + Vite 项目配置访问地址到服务器某个文件夹的解决方案
  • 多元数据直观表示(R语言)
  • DeepSeek 使用 手册 并解决系统繁忙问题
  • burpsuit安装教程,证书安装,jdk环境安装
  • Chapter 4 Noise performance of elementary transistor stages
  • 【拉姆齐定理:阴谋论的数学解释 关键字摘取】
  • Locust性能压测工具使用指南
  • 硬件基础(3):三极管(2):实践应用(持续更新)
  • Python—Excel全字段转json文件(极速版+GUI界面打包)
  • 数字化传播杂志数字化传播杂志社数字化传播编辑部2024年第13期目录
  • CVPR2024 | ANDA | 通过集成渐近正态分布学习实现强可迁移对抗攻击
  • pta天梯L1-007 念数字
  • 从混淆到精通:C/C++常量指针与指针常量的本质差异与实战应用
  • 湃书单|澎湃新闻编辑们在读的14本书:后工作时代
  • 昆明警方重拳打击经济领域违法犯罪:去年抓获905名嫌犯
  • 陕西宁强县委书记李宽任汉中市副市长
  • 赖清德为“临阵脱逃”作准备,国台办:绝不会任“台独”祸首逍遥法外
  • 习近平致电祝贺阿尔巴尼斯当选连任澳大利亚总理
  • 字母哥动了离开的心思,他和雄鹿队的缘分早就到了头