手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

如何使用C++的sort和stable_sort

时间:2024-10-25 09:14:11

sort 和 stable_sort,内部实现是“快速排序”,都是C++的自带函数,提供了方便又高效的排序那么我们该如何使用它们呢?

工具/原料

电脑

C++编译器

sort

1、sort 函数是C++自带的排序函数,期望时间复杂度是 O(nlogn),其中 n 是待排序的元素个数要在头文件中加上 "#include<algorithm>"图为快速排序,该图来源于网络

如何使用C++的sort和stable_sort

2、sort 的使用方法也很简单,如果将一个区间要从小到大排:sort(区间首指针(或迭代器),区间尾指针(或迭代器));注意这里的区间是左闭右开的,即排序的时候不会包含尾指针存储的元素如图,这里的“a”,“a+10”就是指针

如何使用C++的sort和stable_sort

3、如果我们要排序的不是数组,而是别的 S哌囿亡噱TL 容器,比如 vector它的首迭代器就是 begin(),尾迭代器就是 end()正巧,所有 STL 容器也是左闭右开的,所以菀蒯踔观我们就可以这么写:sort(v.begin(),v.end());如图,这里的“v.begin()”,“v.end()”就是迭代器

如何使用C++的sort和stable_sort

4、但是,没有任何“花里胡哨”的 sort 只能从小到大排序,如果我们要从大到小排序,或者更复杂,那该怎么办呢?也很简单,你只需要写一个 cmp 函数即可sort(首,尾,cmp)这个 cmp 有什么用呢?你可以用它改变排序的规则如图,当返回值为 false 时,sort 才会交换两个数

如何使用C++的sort和stable_sort

5、接下来我们详细讲解一下 cmp 函数的写法首咸犴孜稍先,cmp 是个bool类型的函数,应包含两个和所要排序元素同类型的参数例如待排序的元素为 int:b泠贾高框ool cmp (int x,int y)或者自定义的结构体 student : bool cmp (student x,student y)接下来是排序规则,你可以想象一下,x 在 y 的左边,当 cmp 返回 true 时,不改变他们的顺序,返回 false 时,就将 x 和 y 交换如图

如何使用C++的sort和stable_sort

6、cmp 加强版:如果有多个排序要求,按优先级一个一个写下来即可例如我们按照“分数从高到底,分数一样按名字字典序排”如图

如何使用C++的sort和stable_sort

stable_sort

1、为什么说 sort 的“期望”时间复杂度是 O(nlogn)呢?因为 sort(快速排序) 是不稳定排序,它会改变两个关键栓疠瑕愤字相同的元素的相对顺序比如 1 1 1 1 sort 之后的 “1 1 1 1”这里面的“1”有可能就不是原来的“1”,这会增加 sort 的时间复杂度,有可能会被卡成 O(n²)该图来源于网络

如何使用C++的sort和stable_sort

2、这时候,我们就需要“stable_sort”稳定的快速排序了,使用方法和 sort 一模一样,只不过这个函数是“stable”(稳定的)

如何使用C++的sort和stable_sort
© 手抄报圈