C語言解讀qsort函式

2021-10-25 12:15:55 字數 1992 閱讀 2658

c語言中有乙個快速排序的標準庫函式 qsort ,在stdlib.h 中宣告。

定義如下:

void qsort(void *base, int nelem, unsigned int width, int ( * pfcompare)( const void *, const void *));

引數解讀:

base是待排序陣列的起始位址

nelem是待排序陣列的元素個數

width是待排序陣列的每個元素的大小單位是位元組

pfcompare是乙個函式指標,指向乙個比較函式

比較函式

「比較函式」的原型是:int 函式名(const void * elem1, const void * elem2);該函式的兩個引數,elem1 和elem2,指向待比較的兩個元素。也就是說, * elem1 和* elem2 就是待比較的兩個元素。

比較方法如下:

如果 * elem1 應該排在 * elem2 前面,則函式返回值是負整數(任何負整數都行)。

如果 * elem1 和* elem2 哪個排在前面都行,那麼函式返回0。

如果 * elem1 應該排在 * elem2 後面,則函式返回值是正整數(任何正整數都行)。

qsort 函式執行期間,需要比較兩個元素哪個應在前面時,就以兩個元素的位址作為引數,呼叫 pfcompare 函式。根據返回值大小,預設從小到大排序。如果返回值等於0,則哪個在前都行。

qsort系統呼叫實現

#includeint int_cmp(const void *p1, const void *p2)

int main()

; int i = 0;

qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), int_cmp);

for (i = 0; iqsort自己實現

#include #include #include //斷言

#include //pause

//比較函式

int compint(const void *_xp, const void *_yp)

else if (*xp < *yp)

else

}//列印函式

void print(int *arr, int num)

printf("\n");

}//字串比較函式

int compstr(const void *_xp, const void *_yp)

//交換

void swap(char *src, char *dst, int size)

}//快速排序

void my_qsort(void *arr, int num, int size, int(*comp)(const void*, const void*))

} if (flag == 0) }}

int main()

; int num1 = sizeof(arr1) / sizeof(arr1[0]);

print(arr1, num1);

my_qsort(arr1, num1, sizeof(int), compint);

print(arr1, num1);

char *arr2 = ;

int num2 = sizeof(arr2) / sizeof(arr2[0]);

print_str(arr2, num2);

my_qsort(arr2, num2, sizeof(int), compstr);

print_str(arr2, num2);

system("pause");

return 0;

}

C語言 qsort函式

c程式使用標準庫函式qsort排序整數檔案 include include include include define max 10 int int cmp const void a,const void b int main while feof fp length fclose fp qsor...

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

C語言的qsort函式

qsort 看起來和c 的sort 差不多,但是其實差別很大,qsort的cmp函式,傳入的是指標,返回值是int sort的則傳入值,返回值是bool 當qsort的返回值是0時,陣列的順序可能發生改變,這帶來了不確定性 當有不改變相同大小元素的順序時,需要對cmp函式做出調整 qsort的cmp...