1. 程式人生 > >STL 部分排序partial_sort和stable_sort穩定排序

STL 部分排序partial_sort和stable_sort穩定排序

partial_sort接受一個middle迭代器,使序列中的middle-first個最小元素以遞增順序排序,置於[first, middle)內。下面是測試程式碼:

#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main()
{
    int a[] = {10,9,8,7,6,5,4,3,2,1,0};
    vector<int> vec(a, a+11);
    vector<int>::iterator b = vec.begin();
    vector<int>::iterator e = vec.end();
 
    partial_sort(b, b+6, e);     // 前6個最小元素排序
    while (b != e)
        cout << *(b++) << ' ';
    return 0;
}

執行結果:

從結果可以看出,前6個最小元素放在了前6個位置上,而剩下的元素則放於容器後面未排序。

實現partial_sort的思想是:對原始容器內區間為[first, middle)的元素執行make_heap()操作構造一個最大堆,然後拿[middle, last)中的每個元素和first進行比較,first內的元素為堆內的最大值。如果小於該最大值,則互換元素位置,並對[first, middle)內的元素進行調整,使其保持最大堆序。比較完之後在對[first, middle)內的元素做一次對排序sort_heap()操作,使其按增序排列。注意,堆序和增序是不同的。

stable_sort 穩定排序, 標頭檔案還是algorithm,

對給定區間所有元素進行穩定排序,就是相等的元素位置不變,原來在前面的還在前面。

stable_sort(b.begin(),b.end())  和sort函式類似