C++ STL sort

源文件

#include <algorithm>
#include <iostream>
#include <vector>
#include <list>
using namespace std;

/**
 * 表 1 C++ STL 排序函数
函数名	用法
sort (first, last)	对容器或普通数组中 [first, last) 范围内的元素进行排序,默认进行升序排序。
stable_sort (first, last)	和 sort() 函数功能相似,不同之处在于,对于 [first, last) 范围内值相同的元素,该函数不会改变它们的相对位置。
partial_sort (first, middle, last)	从 [first,last) 范围内,筛选出 muddle-first 个最小的元素并排序存放在 [first,middle) 区间中。
partial_sort_copy (first, last, result_first, result_last)	从 [first, last) 范围内筛选出 result_last-result_first 个元素排序并存储到 [result_first, result_last) 指定的范围中。
is_sorted (first, last)	检测 [first, last) 范围内是否已经排好序,默认检测是否按升序排序。
is_sorted_until (first, last)	和 is_sorted() 函数功能类似,唯一的区别在于,如果 [first, last) 范围的元素没有排好序,则该函数会返回一个指向首个不遵循排序规则的元素的迭代器。
void nth_element (first, nth, last)	找到 [first, last) 范围内按照排序规则(默认按照升序排序)应该位于第 nth 个位置处的元素,并将其放置到此位置。同时使该位置左侧的所有元素都比其存放的元素小,该位置右侧的所有元素都比其存放的元素大。
*/

/**
 * sort() 基于快速排序
 * 使用条件:
 * 1.容器支持的迭代器类型必须为随机访问迭代器。这意味着,sort() 只对 array、vector、deque 这 3 个容器提供支持。
 * 2.如果对容器中指定区域的元素做默认升序排序,则元素类型必须支持<小于运算符;同样,如果选用标准库提供的其它排序规则,
    元素类型也必须支持该规则底层实现所用的比较运算符;
 * 3.sort() 函数在实现排序时,需要交换容器中元素的存储位置。这种情况下,如果容器中存储的是自定义的类对象,则该类的内部
    必须提供移动构造函数和移动赋值运算符。
 * 注意:sort()不保证相等元素的相对顺序不变;
*/

/**
 * 语法:
 * 1.//对 [first, last) 区域内的元素做默认的升序排序
    void sort (RandomAccessIterator first, RandomAccessIterator last);
 * 2.//按照指定的 comp 排序规则,对 [first, last) 区域内的元素进行排序
    void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
 * 效率:该函数实现排序的平均时间复杂度为N*log2N(其中 N 为指定区域 [first, last) 中 last 和 first 的距离)。
*/
void printVector(std::vector<int> vec){
    for (auto i = vec.cbegin(); i != vec.cend(); i++)
    {
        std::cout << *i << " " ;
    }
    std::cout << std::endl;
}
bool mycomp(int i, int j){
    return i < j;
}
class mycomp2{
public:
    bool operator() (int i, int j){
        return i < j;
    }
};
class mycomp3{
public:
    bool operator() (int i, int j){
        return i > j;
    }
};
void testSort(){
    std::vector<int> myvector{ 32, 71, 12, 45, 26, 80, 53, 33 };
    //第一种语法,默认升序
    std::sort(myvector.begin(), myvector.end());
   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值