STL 部分排序partial_sort和stable_sort穩定排序
阿新 • • 發佈:2019-01-03
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函式類似