日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

qsort()函数详解

發布時間:2024/1/23 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()函數的功能是對數組進行排序,數組有nmemb個元素,每個元素大小為size。

? ? ? ?參數base? ? ?-base指向數組的起始地址,通常該位置傳入的是一個數組名

? ? ? ?參數nmemb -nmemb表示該數組的元素個數

? ? ? ?參數size? ? ? ?-size表示該數組中每個元素的大小(字節數)

? ? ? ?參數(*compar)(const void *, const void *)? - 此為指向比較函數的函數指針,決定了排序的順序。

? ? ? ?函數返回值:無。

? ? ? ?注意:如果兩個元素的值是相同,那么它們的前后順序是不確定的。也就是說qsort()是一個不確定的排序算法。

? ? 2.2 compar參數

? ? ? ?compar參數指向一個比較兩個元素的函數。比較函數的原型應該像下面這樣,注意兩個形參必須是const void *型,同時在調用compar函數(compar實質為函數指針,這里稱它所指向的函數也為compar)時,傳入的實參也必須轉換成const void *型。在compar函數內部會將const void *型轉換成實際類型,見下文:

int compar(const void *p1, const void *p2);

? ?如果compar返回值小于0(<0),那么p2所指向元素會被排在p2所指向元素的前面

? ?如果compar返回值等于0(=0),那么p2所指向元素與p2所指向元素的順序不確定

? ?如果compar返回值大于0(>0),那么p1所指向元素會被排在p2所指向元素的后面

? ?因此,如果想讓qsort()進行從小到大(升序)排序,那么一個通用的compar函數可以寫成這樣:

int compareMyType(const void *a, const void *b) {if (*(MyType *)a < *(MyType *)b) return -1;if (*(MyType *)a == *(MyType *)b) return 0;if (*(MyType *)a > *(MyType *)b) return 1; }

? ? 注意:你要將MyType換成實際數組元素的類型。

? ? 2.3 一個使用qsort()函數的小例子

/* qsort example */ #include <stdio.h> /* printf */ #include <stdlib.h> /* qsort */int values[] = { 40, 10, 100, 90, 20, 25 };int compare (const void *a, const void *b) {return (*(int *)a - *(int *)b); }int main() {int n;qsort(values, 6, sizeof(int), compare);for (n=0; n<6; n++) printf("%d ", values[n]);return 0; }

? ? ? ? 分析一個compare函數。如果a小于b,則返回值為負數(<0),也即a會排在b的前面。同理,若a大于b,則a會排在b的前面。所以,這里的qsort()為從小到大即升序排序。因此,運行結果為:10 20 25 40 90 100

? ? 2.4 修改compare(), 使qsort()為降序排序

? ? ? 很簡單,只要將上面compare()中的

return (*(int *)a - *(int *)b);

? ? ? ? 改為:

return (*(int *)b - *(int *)a);

三、參考資料

? ? ?1.?qsort - C++ Reference

? ? ?2.man qsort

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的qsort()函数详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。