qsort(基本快速排序的方法,每次把陣列分成兩部分和中間的乙個劃分值,而對於有多個重複值的陣列來說,基本快速排序的效率較低,且不穩定)。整合在c語言庫函式裡面的的qsort函式,使用 三 路劃分的方法解決排序這個問題。所謂三路劃分,是指把陣列劃分成小於劃分值,等於劃分值和大於劃分值的三個部分。
具體介紹:
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare ) (const void *elem1, const void *elem2 ) );
qsort(即,quicksort)主要根據你給的比較條件給乙個快速排序,主要是通過指標移動實現排序功能。排序之後的結果仍然放在原來陣列中。
引數意義如下:
第乙個引數 base 是 需要排序的目標陣列名(或者也可以理解成開始排序的位址,因為可以寫&s[i]這樣的表示式)
第二個引數 num 是 參與排序的目標陣列元素個數
第三個引數 width 是單個元素的大小(或者目標陣列中每乙個元素長度),推薦使用sizeof(s[0])這樣的表示式
第四個引數 compare 指向函式的指標,用於確定排序的順序。就是讓很多人覺得非常困惑的比較函式啦。
我們來簡單討論compare這個比較函式。典型的compare的定義是int compare(const void *a,const void *b);
返回值必須是int,兩個引數的型別必須都是const void *,那個a,b是隨便寫的,個人喜好。假設是對int排序的話,如果是公升序,那麼就是如果a比b大返回乙個正值(a 將被排在b後面),小則負值(a將被排在b前面),相等返回0(不變),其他的依次類推,後面有例子來說明對不同的型別如何進行排序。
#include
#include
int cmp(const
void* a, const
void* b)
int cmp_d(const
void* a, const
void* b)
int cmp_f(const
void* a, const
void* b)
int cmp_c(const
void* a, const
void* b)
int main()
; qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), cmp);
int i = 0;
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
printf("\n");
//對double型陣列排序
double arr1 = ;
qsort(arr1, sizeof(arr1) / sizeof(arr1[0]), sizeof(arr1[0]), cmp_d);
int j = 0;
for (j = 0; j < sizeof(arr) / sizeof(arr[0]); j++)
printf("\n");
//對float型陣列排序
float arr2 = ;
qsort(arr2, sizeof(arr2) / sizeof(arr2[0]), sizeof(arr2[0]), cmp_f);
int k = 0;
for (k = 0; k < sizeof(arr) / sizeof(arr[0]); k++)
printf("\n");
//對字元型陣列排序
char arr3 = ;
qsort(arr3, sizeof(arr3) / sizeof(arr3[0]), sizeof(arr3[0]), cmp_c);
int n = 0;
for (n = 0; n < sizeof(arr) / sizeof(arr[0]); n++)
printf("\n");
system("pause");
return
0;}
程式執行結果:
qsort 函式詳解
一 寫在開頭 1.1 本節內容 學習c語言中的qsort 函式。二 qsort 2.1 函式原型 void qsort void base,size t nmemb,size t size,int compar const void const void 函式功能 qsort 函式的功能是對陣列進行...
qsort函式和bsearch函式詳解
qsort 包含在標頭檔案中,此函式 根據給的比較條件進行快速排序,排序之後的結果仍然放在原陣列中,需要自己寫乙個比較函式。函式原型 void qsort void base,size t num,size t size,int comparator const void const void ba...
C語言qsort函式詳解
qsort函式是ansi c標準中提供的,其宣告在stdlib.h檔案中,是根據二分發寫的,其時間複雜度為n log n 其結構為 void qsort void base,size t nelem,size t width,int comp const void const void 其中 bas...