一.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(constvoid *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型別陣列排序
doublein[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)實現降序。
主函式為:
intmain()
,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 互換 ...