深入了解C 的sort和stable_sort函数
sort和stable_sort,内部实现是“快速排序”,都是C 的自带函数,提供了方便又高效的排序。那么我们该如何使用它们呢?
sort函数的基本用法
sort函数是C 自带的排序函数,期望时间复杂度是 O(nlogn),其中 n 是待排序的元素个数。要在头文件中加上include
sort的使用方法也很简单,如果将一个区间要从小到大排:sort(区间首指针(或迭代器),区间尾指针(或迭代器))。注意这里的区间是左闭右开的,即排序的时候不会包含尾指针存储的元素。
如果我们要排序的不是数组,而是别的STL容器,比如vector,它的首迭代器就是begin(),尾迭代器就是end()。正巧,所有STL容器也是左闭右开的,所以我们就可以这么写:sort((), v.end())。
利用sort进行自定义排序
但是,没有任何“花里胡哨”的sort只能从小到大排序,如果我们要从大到小排序,或者更复杂,那该怎么办呢?也很简单,你只需要写一个cmp函数即可sort(首,尾,cmp)。这个cmp有什么用呢?你可以用它改变排序的规则。
接下来我们详细讲解一下cmp函数的写法。首先,cmp是个bool类型的函数,应包含两个和所要排序元素同类型的参数。例如待排序的元素为int:bool cmp (int x, int y)或者自定义的结构体student: bool cmp(student x, student y)。
定制排序规则
排序规则很关键,你可以想象一下,x在y的左边,当cmp返回true时,不改变他们的顺序,返回false时,就将x和y交换。cmp加强版:如果有多个排序要求,按优先级一个一个写下来即可。例如我们按照“分数从高到底,分数一样按名字字典序排”。
通过灵活运用sort和stable_sort函数,我们可以轻松实现各种不同规则下的排序需求,提高代码的效率和可读性,为C 编程带来更多便利。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。