c++_sort函数

news/2025/2/28 9:38:44/

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不会发生交换时,要返回真;

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


http://www.ppmy.cn/news/1575469.html

相关文章

在VSCode 中使用通义灵码最新版详细教程

在 VSCode 中使用通义灵码&#xff1a;最新版详细教程与使用场景 Visual Studio Code&#xff08;简称 VSCode&#xff09;是一款由微软开发的轻量级、功能强大的开源代码编辑器&#xff0c;支持多种编程语言&#xff0c;深受开发者喜爱。而通义灵码&#xff08;TONGYI Lingma…

scalefit分析系统-人体工程学分析系统

基于先进的德国scalefit分析系统&#xff0c;可根据职业科学和生物力学参数直接在现场对体力工作量进行可视化和评估&#xff0c;帮助检测疾病、伤害和损害的原因。 据调研&#xff0c;国内整套系统报价在人民币65万左右。包含动捕硬件、分析软件、工程学系统等。 工作站配置要…

文教资料杂志文教资料杂志社文教资料编辑部2024年第19期目录

语言文学研究 “X什么Y”构式主观性与主观化浅析 郑昕怡; 杜诗之“忧”的艺术抒写 李佳欣; 中国儿童绘本发展简史探析 杜娟; 《凝视太阳》的文学伦理学批评解读 张佳圆; 论《哈姆雷特》中的寓言式宇宙观与个体思想的矛盾冲突 张佳佳; 符号象征&#xf…

kafka-新增topic副本数

一. 简述&#xff1a; 在 Kafka 中增加主题&#xff08;Topic&#xff09;的副本数可以提高数据的可靠性和容错能力。在创建topic时&#xff0c;如果设置的不合理&#xff0c;或者创建后有新的需求变动&#xff0c;就需要调整了。 二. 方法&#xff1a; 可通过官方的指令&am…

Maven的传递性、排除依赖、生命周期、插件

一、Maven的传递性 蓝色背景中的两个jar包是projectA的直接依赖&#xff0c;其余的Jar包是projectA的间接依赖。 projectA可以使用直接依赖&#xff0c;也可以使用间接依赖。 maven-projectB项目引入了maven-projectC(整个项目打成了jar包&#xff09;和junit两个jar包。 ma…

深入理解 Kubernetes 命名空间:高效管理与隔离资源的关键

深入理解 Kubernetes 命名空间:高效管理与隔离资源的关键 目录 深入理解 Kubernetes 命名空间:高效管理与隔离资源的关键什么是命名空间?命名空间的作用1. 资源隔离2. 多租户支持3. 资源管理和策略控制4. 简化管理创建和使用命名空间命名空间与集群中的其他资源结语在 Kuber…

【Python爬虫(69)】解锁游戏数据宝藏:Python爬虫实战攻略

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发…

前端系列之:Blob

Blob 与二进制 什么是二进制&#xff1f; 二进制是计算机数据的基本表示形式&#xff0c;只使用 0 和 1 两个数字来表示数值。任何类型的数据&#xff08;无论是文本、图片、音频文件等&#xff09;都可以通过二进制表示。 什么是 Blob&#xff1f; 全称 Binary Large Object&a…