總結一下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函式,使用...