STL之partial_sort排序學習

來源:互聯網
上載者:User

partial_sort(beg,mid,end)
partial_sort(beg,mid,end,comp)
對mid-beg個元素進行排序,也就是說,如果migd-beg等於42,則該函數將有序次序中的最小值元素放在序列中
的前42個位置。partial_sort完成之後,從beg到mid(但不包括mid)範圍內的元素時有序的,已排序範圍內沒有
元素大於mid之後的元素。未排序元素之間的次序是未指定的。
例如:
有一個賽跑成績的集合,我們想知道前三名的成績但並不關心其他名次的次序,可以這樣對這個序列進行排序。
partial_sort(scores.begin(),scores.begin()+3,scores.end());

那麼paitical_sort的原理是什麼呢?是堆排序!
首先建立一個堆,得到最大值。如果要得到次大值,就將頭結點去掉,即調用pop_heap(),此時的頭結點就是
次大值,可以這樣依次得到最大或者最小的幾個值!

#include <vector>#include <iterator>#include <iostream>#include <algorithm>#include <functional>#include <cstdlib>#include <time.h>using namespace std;int rand_int(){return rand()%100;}void print(vector<int> &v,const char* s){cout<<s<<endl;copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));cout<<endl;}bool cmp(int &a, int &b){if(a>b)return true;return false;}class compare{public:    bool operator()(const int &a,const int &b)    {        if(a<b)            return true;        return false;    }};int main(){srand(time(NULL));vector<int> v;generate_n(back_inserter(v),10,rand_int);print(v,"產生10個隨機數");partial_sort(v.begin(),v.begin()+4,v.end());print(v,"局部遞增排序");partial_sort(v.begin(),v.begin()+4,v.end(),cmp);print(v,"局部遞減排序");partial_sort(v.begin(),v.begin()+4,v.end(),compare());print(v,"局部遞增排序");return 0;}

通過程式可以看到兩次局部遞增排序並不相同,因為partial_port不是穩定排序演算法。在只需要最大或最小的幾個值時,partial_port比其他排序演算法快。

partial_sort

接受三個參數,分別是區間的頭,中間和結尾。執行後,將前面M(M=中間-頭)個元素有序地放在前面,後面的元素肯定是比前面的大,但他

們內部的次序沒有保證。有序序列不包括中間參數。

nth_element 

這個函數只真正排序出一個元素來,就是第n個。函數有三個迭代器的輸入(當然還可以加上一個謂詞),執行完畢後,中間位置指向的元素保證和完全排序後

這個位置的元素一致,前面區間的元素都小於(精確地說,是不大於)後面區間的元素。

所以要得到最大或者最小的20個元素,調用稍有不同。

partial_sort(v.begin(),v.begin()+20,v.end());

nth_element(v.begin(),v.begin()+19,v.end());


其他排序請參看http://blog.csdn.net/xiaoniba10631/article/details/6727045

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.