c 使用stl排序

2021-05-25 08:12:20 字數 1815 閱讀 8889

想起來自己天天排序排序,冒泡啊,二分查詢啊,結果在stl中就自帶了排序函式sort,qsort,總算把自己解脫了~

所以自己總結了一下,首先看sort函式見下表:

函式名  功能描述 

sort  對給定區間所有元素進行排序 

stable_sort  對給定區間所有元素進行穩定排序 

partial_sort  對給定區間所有元素部分排序 

partial_sort_copy  對給定區間複製並排序 

nth_element  找出給定區間的某個位置對應的元素 

is_sorted  判斷乙個區間是否已經排好序 

partition  使得符合某個條件的元素放在前面 

stable_partition  相對穩定的使得符合某個條件的元素放在前面 

要使用此函式只需用#include sort即可使用,語法描述為:

sort(begin,end),表示乙個範圍,例如:

int _tmain(int argc, _tchar* argv)

,i;for(i=0;i<20;i++)

cout《輸出結果將是把陣列a按公升序排序,說到這裡可能就有人會問怎麼樣用它降序排列呢?這就是下乙個討論的內容.

一種是自己編寫乙個比較函式來實現,接著呼叫三個引數的sort:sort(begin,end,compare)就成了。對於list容器,這個方法也適用,把compare作為sort的引數就可以了,即:sort(compare).

1)自己編寫compare函式:

bool compare(int a,int b)

int _tmain(int argc, _tchar* argv)

,i;for(i=0;i<20;i++)

cout<2)更進一步,讓這種操作更加能適應變化。也就是說,能給比較函式乙個引數,用來指示是按公升序還是按降序排,這回輪到函式物件出場了。

為了描述方便,我先定義乙個列舉型別enumcomp用來表示公升序和降序。很簡單:

enum enumcomp;

然後開始用乙個類來描述這個函式物件。它會根據它的引數來決定是採用「<」還是「>」。

class compare ;

bool operator () (int num1,int num2)

} };接下來使用 sort(begin,end,compare(asc)實現公升序,sort(begin,end,compare(desc)實現降序。

主函式為:

int main()

,i;for(i=0;i<20;i++)

cout<3)其實對於這麼簡單的任務(型別支援「<」、「>」等比較運算子),完全沒必要自己寫乙個類出來。標準庫里已經有現成的了,就在functional裡,include進來就行了。functional提供了一堆基於模板的比較函式物件。它們是(看名字就知道意思了):equal_to、not_equal_to、greater、greater_equal、less、less_equal。對於這個問題來說,greater和less就足夠了,直接拿過來用:

公升序:sort(begin,end,less());

降序:sort(begin,end,greater()).

int _tmain(int argc, _tchar* argv)

,i;for(i=0;i<20;i++)

cout<());

for(i=0;i<20;i++)

cout<4)既然有迭代器,如果是string 就可以使用反向迭代器來完成逆序排列,程式如下:

int main()

int main()

,i;for(i=0;i<20;i++)

cout<

STL之使用vector排序

應用場景 在記憶體中維持乙個有序的vector 1 2 3 include 4 include 5 include 67 先自定義乙個結構體 8struct test 13bool sortbym1 const test v1,const test v2 注意 本函式的引數的型別一定要與vector...

STL 穩定排序

演算法流程如下圖 主要使用的就是類似歸併排序,分為有快取和沒有快取兩種情況,其中快取的大小也影響程式的遞迴呼叫。源 如下 template bidirectionaliterator1 rotate adaptive bidirectionaliterator1 first,bidirectiona...

STL排序方法

適合讀者 stl初學者 include 快速排序sort 平均o nlogn 穩定排序stable sort 最好o nlogn 最壞o n logn 2 用法與sort 相同 堆排序s ort heap o nlogn 用法同sort 要先make heap 或push heap 目錄 用法一 內...