泛型算法(十四)之排序算法

本文详细介绍了C++标准库中的排序算法,包括partial_sort、partial_sort_copy、is_sorted、is_sorted_until、sort及stable_sort等函数的应用实例。通过具体代码演示了如何使用这些函数进行数据排序、筛选和验证。

1、partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last):使得[first, middle)为整个序列中最小的那些元素并为升序。[middle, last)的元素任意安排。

    std::vector<int> c = {6, 2, 9, 0, 5, 1, 3, 8, 4, 7};
    //使得整个序列中最小的5个元素升序,其它元素任意安排
    std::partial_sort(c.begin(), c.begin() + 5, c.end());
    //输出c
    for (auto var : c)
    {
        std::cout << var << ",";
    }
    //打印结果:0,1,2,3,4,9,6,8,5,7,

2、part_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, Compare comp):重载版本

 自己实现comp,向算法定制操作。

3、partial_sort_copy(InputIterator first, InputIterator last, RandomAccessIterator result_first, RandomAccessIterator result_last):从输入序列复制最小的一批元素到结果序列中,并按升序排列。

    std::vector<int> c1 = {7, 2, 9, 0, 5, 1, 3, 6, 4, 8};
    std::vector<int> c2;
    c2.resize(7);
    //从c1中复制最小的7个元素到序列c2中,并按升序排列
    std::partial_sort_copy(c1.begin(), c1.end(), c2.begin(), c2.end());
    //输出c
    for (auto var : c2)
    {
        std::cout << var << ",";
    }
    //打印结果:0,1,2,3,4,5,6,

4、partial_sort_copy(InputIterator first, InputIterator last, RandomAccessIterator result_first, RandomAccessIterator result_last, Compare comp):重载版本

自己实现comp,向算法定制操作。

5、is_sorted(ForwardIterator first, ForwardIterator last):C11版本,判断序列是否为升序。

    std::vector<int> c = {7, 2, 9, 0, 5, 1, 3, 6, 4, 8};
    //判断序列c是否为升序
    bool is_sorted = std::is_sorted(c.begin(), c.end());
    //输出
    std::cout << (int)is_sorted;
    //打印结果:0

6、is_sorted(ForwardIterator first, ForwardIterator last, Compare comp):C11版本,重载版本。

自己实现comp,向算法定制操作。

7、is_sorted_until(ForwardIterator first, ForwardIterator last):C11版本,返回序列从头部开始为升序的子序列的结束处

    std::vector<int> c = {1, 2, 3, 4, 6, 5, 7, 9, 0, 8};
    //返回序列从头部开始为升序的子序列的结束处
    auto iter = std::is_sorted_until(c.begin(), c.end());
    //输出iter指向的元素
    std::cout << *iter;
    //打印结果:5

8、is_sorted_until(ForwardIterator first, ForwardIterator last, Compare comp):C11版本,重载版本。

自己实现comp,向算法定制操作。

9、sort(RandomAccessIterator first, RandomAccessIterator last):排序。

    std::vector<int> c = {1, 2, 3, 4, 6, 5, 7, 9, 0, 8};
    //排序c
    std::sort(c.begin(), c.end());
    //输出c
    for (auto var : c)
    {
        std::cout << var << ",";
    }
    //打印结果:0,1,2,3,4,5,6,7,8,9,

10、sort(RandomSccessIterator first, RandomAccessIterator last):重载版本。

自己实现comp,向算法定制操作。

11、stable_sort(RandomAccessIterator first, RandomAccessIterator last):稳定排序。

通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。

12、stable_sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp):重载版本。

自己实现comp,向算法定制操作。

转载于:https://www.cnblogs.com/dongerlei/p/5144110.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值