zoukankan      html  css  js  c++  java
  • STL 源代码剖析 算法 stl_algo.h -- partial_sort / partial_sort_copy

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie

    partial_sort / partial_sort_copy

    -----------------------------------------------------------------------------------------------------------------------------------------


    描写叙述:本算法接受一个 middle 迭代器(位于序列[first, last) 之列)。然后又一次安排[first, last),
    使序列中的 middle - first 个最小元素以递增顺序排序。置于[first, last)内。
    其余 last - middle 个元素安置于[middle, last)中,不保证有不论什么特定顺序。
    思路:
    算法内部採用 heap sort
    1.用 make_heap() 将 [first, middle) 组织成一个 max-heap
    2.将[middle,last) 中的每个元素与 max-heap 的堆顶元素比較,假设小于该值,就互换位置并又一次保持 max-heap 状态。
    3.如今[first, middle)里保存的是较小的 middle - first 个元素,再使用 sort_heap() 对[first, middle] 排序就能够了
    复杂度:(last - first) * log(middle - first) 次比較 


    源代码:
    template <class RandomAccessIterator>
    inline void partial_sort(RandomAccessIterator first,
                             RandomAccessIterator middle,
                             RandomAccessIterator last) {
      __partial_sort(first, middle, last, value_type(first));
    }
    
    template <class RandomAccessIterator, class T>
    void __partial_sort(RandomAccessIterator first, RandomAccessIterator middle,
                        RandomAccessIterator last, T*) {
      make_heap(first, middle);
      for (RandomAccessIterator i = middle; i < last; ++i)
        if (*i < *first) 
          __pop_heap(first, middle, i, T(*i), distance_type(first));
      sort_heap(first, middle);
    }

    演示样例:
    int A[] = {7, 2, 6, 11, 9, 3, 12, 10, 8, 4, 1, 5};
    const int N = sizeof(A) / sizeof(int);
    
    
    partial_sort(A, A + 5, A + N);
    copy(A, A + N, ostream_iterator<int>(cout, " "));
    // The printed result is "1 2 3 4 5 11 12 10 9 8 7 6".


  • 相关阅读:
    一、计算机网络概述
    一些早期的sftp在openssh升级到 openssh7可能闪断解法
    ssh: error while loading shared libraries: libcrypto.so.1.0.0
    PHP Warning: imagettftext(): Problem loading glyph in
    compile pcre on vs2008
    《祝总骧312经络锻炼法》
    神秘的经络
    益嗅上清汤
    鼻病 《仁术便览》
    鼻(附嚏)《医述》
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6707483.html
Copyright © 2011-2022 走看看