首先,咱們得知道 qsort() 是什么玩意,什么能用它。qsort()是C語(yǔ)言中非常重要的一個(gè)庫(kù)函數(shù),它可以按特定的排序方式對(duì)任意類型的數(shù)組進(jìn)行排序,這個(gè)特定排序方式需要用戶自行編寫,然后作為參數(shù)傳入該函數(shù)當(dāng)中。在排序完成后,數(shù)組的元素就滿足所指定的順序了。
順便插一句,就是 qsort() 函數(shù)是 quick sort(快排)的縮寫,因?yàn)樗且环N快速排序算法的實(shí)現(xiàn)。
那既然是排序,就肯定跟比較的結(jié)果有關(guān)啦 ~
函數(shù)原型:
```c
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void* ))
```
我們先來(lái)翻譯一下這個(gè)原型:
參數(shù):
* base -- 指向要排序的數(shù)組的第一個(gè)元素的指針。
* nitems -- 由 base 指向的數(shù)組中元素的個(gè)數(shù)。
* size -- 數(shù)組中每個(gè)元素的大小,以字節(jié)為單位。
* compar -- 用來(lái)比較兩個(gè)元素的函數(shù)的指針。這個(gè)函數(shù)指針接受兩個(gè)指向常量的 void * 類型的參數(shù)(也就是你需要先強(qiáng)制類型轉(zhuǎn)換),并返回一個(gè) int 類型的值,這個(gè)值表示兩個(gè)元素的順序。
這個(gè)函數(shù)指針通常是由用戶自定義的比較函數(shù),而我們可以使用此函數(shù)來(lái)寫出相應(yīng)的程序。
那么怎么用呢?
我們可以先定義一個(gè)比較函數(shù)(一般情況下要定義一個(gè)單獨(dú)的函數(shù)):
```c
int compare(const void *a, const void *b) {
int x, y;
x = *(int *)a; //強(qiáng)制類型轉(zhuǎn)換
y = *(int *)b;
if (x < y)
return -1;
else if (x == y)
return 0;
else
return 1;
}
```
這個(gè)函數(shù)會(huì)將數(shù)組中的兩個(gè)元素進(jìn)行比較,返回一個(gè)int型的值,表示它們的大小關(guān)系。現(xiàn)在我們可以在我們的主函數(shù)中使用qsort()函數(shù):
```c
#include #include #define SIZE 10 int compare(const void *a, const void *b) { int x, y; x = *(int *)a; y = *(int *)b; if (x < y) return -1; else if (x == y) return 0; else return 1; } int main(void) { int array[SIZE] = { 5, 9, 2, 8, 4, 1, 10, 3, 7, 6 }; int i; qsort(array, SIZE, sizeof(int), compare); //使用qsort()函數(shù)進(jìn)行排序 for(i = 0; i < SIZE; i++) { printf("%d ", array[i]); } printf("\n"); return 0; } ``` 我們來(lái)試試,看看能不能成功排序,我預(yù)測(cè)答案是:能! 輸出結(jié)果: ```c $ ./test 1 2 3 4 5 6 7 8 9 10 ``` 完美! 所以,當(dāng)咱們需要對(duì)任何類型的數(shù)據(jù)進(jìn)行排序時(shí),qsort()函數(shù)是非常好的選擇。只需編寫相應(yīng)的比較函數(shù),將其指針傳遞給qsort()函數(shù),就可以輕松地將數(shù)組排序了。 www.yinyiprinting.cn 寧波海美seo網(wǎng)絡(luò)優(yōu)化公司 是網(wǎng)頁(yè)設(shè)計(jì)制作,網(wǎng)站優(yōu)化,企業(yè)關(guān)鍵詞排名,網(wǎng)絡(luò)營(yíng)銷知識(shí)和開發(fā)愛好者的一站式目的地,提供豐富的信息、資源和工具來(lái)幫助用戶創(chuàng)建令人驚嘆的實(shí)用網(wǎng)站。 該平臺(tái)致力于提供實(shí)用、相關(guān)和最新的內(nèi)容,這使其成為初學(xué)者和經(jīng)驗(yàn)豐富的專業(yè)人士的寶貴資源。
聲明本文內(nèi)容來(lái)自網(wǎng)絡(luò),若涉及侵權(quán),請(qǐng)聯(lián)系我們刪除! 投稿需知:請(qǐng)以word形式發(fā)送至郵箱18067275213@163.com
做好內(nèi)容的人有福了!SEO本來(lái)就該如此! 我也認(rèn)為這個(gè)是有道理的