qsort函式詳解

2021-07-31 21:47:27 字數 2167 閱讀 4105

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...