C中的qsort函式

2021-06-17 21:19:32 字數 1518 閱讀 9372

c中的qsort函式

一、簡介

原 型: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));

功 能: 使用快速排序例程進行排序

說明:qsort函式是ansi c標準中提供的,其宣告在stdlib.h檔案中,是根據二分法寫的,其時間複雜度為n*log(n)。

qsort要求提供的函式是需要自己定義的乙個比較函式,比較函式使得qsort通用性更好。有了比較函式qsort可以實現對陣列、字串、結構體等結構進行公升序或降序排序。

如int cmp(const void *a, const void *b)中有兩個元素作為引數,返回乙個int值,如果比較函式返回大於0,qsort就認為a > b,返回小於0qsort就認為a < b。qsort知道元素的大小了,就可以把大的放前面去。如果你的比較函式返回本來應該是1的(即a > b),而卻返回-1(小於0的數),那麼qsort認為a < b,就把b放在前面去,但實際上是a > b的,所以就造成了降序排序的差別了。

簡單來說,比較函式的作用就是給qsort指明元素的大小是怎麼比較的。

二、使用舉例(mingw5測試通過)

1、對一維陣列排序:

2、對字串排序:

01 #include 02 #include 03

04 typedef char element_type;

05

06 element_type list = "djfkwjefklwefagj";

07

08 int comp(const void *p1,const void *p2)

09

15

16 int main(void)

17

3、按結構體中某個關鍵字排序(對結構體一級排序):

01 #include 02 #include 03

04 struct node

05 s[100];

09

10 int comp(const void *p1,const void *p2)

11

14

15 int main(void)

16

4、按結構體中多個關鍵字排序(對結構體多級排序)[以二級為例]:

1 struct node

2 s[100];//按照x從小到大排序,當x相等時按y從大到小排序

1 int comp(const void *p1,const void *p2)

2 5、對結構體中字串進行排序:

01 struct node

02 s[100];

06

07 //按照結構體中字串 str 的字典序排序

08 int comp(const void *p1,const void *p2)

09

c 中qsort函式簡介

c語言中排序的演算法有很多種,系統也提供了乙個函式qsort 可以實現快速排序。原型如下 void qsort void base,size t nmem,size t size,int comp const void const void 它根據comp所指向的函式所提供的順序對base所指向的陣...

C庫中qsort函式的使用

qsort 功 能 使用快速排序例程進行排序 用 法 void qsort void base,int nelem,int width,int fcmp const void const void 各引數 1 待排序陣列首位址 2 陣列中待排序元素數量 3 各元素的占用空間大小 4 指向函式的指標 ...

C語言的qsort函式

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