
上回书说道,对于一个数组而言,在目前阶段最优的排序算法是快排。但是快速很长,在每一次使用时候都要重新书写一遍,并不方便我们使用。这时候,c++中的STL(标准模板库)就派上用场了,他可以极大的减轻我们的工作量。如果不了解基础排序算法的,欢迎点击了解更多基础排序算法入门教程。
这一篇文章就会详细的讲解STL里面sort函数的用法,来帮助我们完成任务。
简单介绍一下STL
STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C++ 提供的一个基础模板的集合,用于完成诸如输入/输出、数学计算等功能。
总的来说,STL里面包含以下内容
| 组件 | 描述 |
容器 (Containers) | 容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。 |
算法 (Algorithms) | 算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。 |
迭代器 (iterators) | 迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。 |
这三个组件中都带有丰富的预定义函数,帮助我们通过简单的方式处理复杂的任务。
sort函数的基本原理
sort并不是简单的快速排序,它对普通的快速排序进行了优化,此外,它还结合了插入排序和推排序。系统会根据你的数据形式和数据量自动选择合适的排序方法,这并不是说它每次排序只选择一种方法,它是在一次完整排序中不同的情况选用不同方法,比如给一个数据量较大的数组排序,开始采用快速排序,分段递归,分段之后每一段的数据量达到一个较小值后它就不继续往下递归,而是选择插入排序,如果递归的太深,他会选择推排序。
sort的基本用法
sort函数的基本形式:
sort(first_pointer,first_pointer+n,cmp)
sort可以给数组,或者链表list、向量排序。要使用sort函数,首先必须要引入标准库<algorithm>
#include <algorithm>
这个函数有三个参数,第一个为参数的首地址,第二个为首地址加上数组的n,代表尾地址的下一地址;第三个为排序规则,默认可以不填,可以声明函数改变排序的规则,如升序改为降序等等;
用法一:对函数进行升序排列
使用sort函数可以对数组进行升序排列,书写一段简单的代码,我们观察一下结果
#include<bits/stdc++.h>using namespace std;int main(){int a[5]={4,6,7,3,1};sort(a,a+5);for(int i=0;i<5;i++){cout<<a[i];}return 0;}

可以看到,数组按照次序规则升序排列了。
那么假如我想要对数组的内容进行降序排列,又该怎么办呢?
用法二:对函数进行降序排列
在上文的代码中稍微改动一下,利用前文中所提到的排序规则,我们很容易写出了以下的代码。
#include<bits/stdc++.h>using namespace std;bool cmp(int a,int b){return a>b;}int main(){int a[5]={4,6,7,3,1};sort(a,a+5,cmp);for(int i=0;i<5;i++){cout<<a[i];}return 0;}
在这段代码中,我们新增加了一个bool函数cmp,用来自定义sort排序规则。
用法三:对结构体进行排列
类似的,运用自定义排列的规则,我们可以很轻松对于结构体排列
#include<bits/stdc++.h>using namespace std;struct test{int id,number;}Test[1000];bool cmp(test a, test b){return a.number<b.number;}int main(){int n;cin>>n;for(int i=0;i<n;i++){Test[i].id=i+1;cin>>Test[i].number;}sort(Test,Test+n,cmp);for(int i=0;i<n;i++){cout<<Test[i].id<<" "<<Test[i].number<<endl;}return 0;}
总结下来,STL中sort函数还是比较简单且基础的,在日常中还是要多多练习。
文章最后祝大家学业有成,不断进步
如果觉得写的好欢迎点个赞




