庫函式sort與qsort的使用

2021-07-04 03:45:43 字數 2303 閱讀 2494

總結一下sort和qsort的使用方法。

首先看sort函式見下表:

函式原型:

templatevoidsort(ranit first, ranit last);

templatevoidsort(ranit first, ranit last, pred pr);

函式名功能描述

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就足夠了,直接拿過來用:

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<

相關:

1)why你必須給予元素個數?

因為陣列不知道它自己有多少個元素

2)why你必須給予大小?

因為qsort不知道它要排序的單位.

3)why你必須寫那個醜陋的、用來比較倆數值的函式?

因為qsort需要乙個指標指向某個函式,因為它不知道它所要排序的元素型別.

4)whyqsort所使用的比較函式接受的是const void*引數而不是char*引數?

因為qsort可以對非字串的數值排序.

排序庫函式sort 和qsort

sort是stl中提供的演算法,標頭檔案為 include以及using namespace std 函式原型如下 template void sort randomaccessiterator first,randomaccessiterator last template void sort r...

C C 中排序的庫函式sort和qsort

1.sort 必須新增標頭檔案 include sort屬於標準模板庫,只適用於c c語言不支援.include include using namespace std int main sort a,a sizeof a sizeof a 0 for int i 0 i sizeof a size...

qsort函式 sort函式

先說明一下qsort和sort,只能對連續記憶體的資料進行排序,像鍊錶這樣的結構是無法排序的。首先說一下,qsort qsort 基本快速排序的方法,每次把陣列分成兩部分和中間的乙個劃分值,而對於有多個重複值的陣列來說,基本快速排序的效率較低,且不穩定 整合在c語言庫函式裡面的的qsort函式,使用...