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

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,向算法定制操作。

posted on 2016-01-20 10:21  dongtshj  阅读(670)  评论(0)    收藏  举报