C语言中qsort函数用法详解:

Python021

C语言中qsort函数用法详解:,第1张

1.该函数属于#include <stdlib.h>标准库中, 且是快速排序;

2.qsort函数声明:void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*));

3.*base:指向要排序数组的第一个元素指针,而数组名则是该数组的起始地址;size_t nitems:指数组中元素个数;size_t size:指数组中单个元素的大小;cmp:指用来比较两个元素的函数(一般根据需求自己重写);

4.实例:1.定义一结构体:

                struct Interval{

                    int x, y

                  }I[110]

                2.重写qsort函数

                    int cmp(const void *a, const void *b){

                            if(((const struct Interval *)a)->x != ((const struct Interval *)b)->x)

                                    return ((const struct Interval *)b)->x >((const struct Interval *)a)->x//先按左端点从大到小排列

                             else return ((const struct Interval *)a)->y <((const struct Interval *)b)->y//然后按左端点相同的右端点从小到大排序

}

                        1.((const struct Interval *)b)是指针类型    2.return的值与需求相反(具体可看上文)

                   3.main函数里调用:

                    qsort(I, n, sizeof(struct Interval), cmp)(结构体的单个元素大小与其他标准类型不同)。

排序方法有很多种,

选择排序,冒泡排序,归并排序,快速排序等。

看名字都知道快速排序

是目前公认的一种比较好的排序算法(我没听书速度比这快的了,特殊场合例外),比选择排序,冒泡排序都要快。这是因为他速度很快,所以系统也在库里实现这个算法,便于我们的使用。

这就是qsort。

qsort

要求提供一个

比较函数,是为了做到通用性更好一点。比如你不仅仅的是要排序一个数字而已,可能你要用来排序几个数字

,比如有一个结构

struct

num

{

int

a

int

b

}

然后我有一个num

类型的数组,

num

dddd[100]

我想给

dddd这个数组排序,那怎么办?

我想让

a

+b

最大的num元素排在数组的最前面,那又怎么办?

这都可以通过定义比较函数来做到的。

比较函数的作用就是给qsort指明

元素的大小是怎么比较的。

像这样的比较函数

inline

int

MyCmp(const

void*

a,

const

void*

b)

都是有两个元素

作为参数,返回一个int

值,

如果

比较函数返回大于0,qsort就认为

a>b

,

如果比较函数返回等于0

qsort就认为a

和b

这两个元素相等,返回小于零

qsort就认为

a<b

qsort

知道元素大小,就可以把大的放到前面去。

如果你的比较函数放回本来应该是1

的(a>b),你比较函数却返回一个

-1

(小于零的)那么qsort认为a<b

的,就把

b放到前面去,但实际上是a大于b的,所以就造成升降序的差别了。

同样的道理,如果有一个

结构

strunt

人{

int

身高;

int

体重;

}

你想让身高最小的人排在最前面,那么你也要自己定义自己的比较函数