qsort ,sort 排序函式

2021-09-06 12:34:21 字數 3520 閱讀 9125

一.qsort()函式

功 能: 使用快速排序例程進行排序

標頭檔案:stdlib.h

用 法:

void qsort(void *base,int nelem,int width,int (*fcmp)(const

void *,const

void *));

引數:

1待排序陣列首位址

2陣列中待排序元素數量

3 各元素的占用空間大小

4 指向函式的指標,用於確定排序的順序

qsort(即,quicksort)主要根據你給的比較條件給乙個快速排序,主要是通過指標移動實現排序功能。排序之後的結果仍然放在原來陣列中。

其中qsort和compare的用法如下:

void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )

int compare (const

void *elem1, const

void *elem2 ) ;

1、對int型別陣列排序

compare函式

int compare(const

void *a , const

void *b )

測試例項:

#include#includeusing namespace std;

int compare(const void *a,const void *b)

int main()

; int i;

int length = sizeof(a)/sizeof(int);

for(i=0;i2.對char型別陣列排序(同int型別)

char word[100

];int compare( const

void *a , const

void *b )

qsort(word,

100,sizeof(word[0]),compare);

3.對double型別陣列排序

double

in[100

];int compare( const

void *a , const

void *b )

qsort(

in,100,sizeof(in[0]),compare);

二.sort函式

常用於c++中,標頭檔案為algorithm。

用法:

sort(first,last)

在[first, last)中的元素進行排序按公升序排列

注意:sort預設排序後是公升序。如果要想按降序排列,需自己編寫乙個比較函式來實現。

函式名功能描述

sort

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

stable_sort

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

partial_sort

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

partial_sort_copy

對給定區間複製並排序

nth_element

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

is_sorted

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

partition

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

stable_partition

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

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

int _tmain(int argc, _tchar*argv)

,i;

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

cout

sort(a,a+20); //

按公升序排序

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

cout

return0;

}

輸出結果將是把陣列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

sort(a,a+20

,compare(desc));

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

cout

return0;

}

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()

qsort sort函式效能測試

1,c sort函式,比較函式直接return 0或者1 int cmp int a,int b define p 2 int ns p int main 1 return 1 哪怕p 2,只有2個數,程式也會直接崩潰,因為這不是嚴格弱序。參考 2 return 0 12345 0 123456 4...

快速排序 自行實現 qsort sort

快排呢,就是每次以第乙個數為基準,把後面所有數歸位,歸位即將比它小的放在它的左邊,比它大的放在它的右邊。通過遞迴,再將它左邊的數列進行如此排序,右邊也如此,之後的之後的子數列也不斷如此。include include using namespace std void qsort int jk,int...

快速排序演算法手工實現及qsort sort運用

快速排序演算法手工實現及qsort sort運用 1.快速排序演算法 1 設定兩個變數i j,排序開始的時候 i 0,j n 1 2 以第乙個陣列元素作為關鍵資料,賦值給key,即key a 0 3 從j開始向前搜尋,即由後開始向前搜尋 j 找到第乙個小於key的值a j 將a j 和a i 互換 ...