重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

c语言qsort函数实现的简单介绍

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

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

伍家岗网站建设公司成都创新互联,伍家岗网站设计制作,有大型网站制作公司丰富经验。已为伍家岗上1000家提供企业网站建设服务。企业网站搭建\成都外贸网站制作要多少钱,请找那个售后服务好的伍家岗做网站的公司定做!

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); (结构体的单个元素大小与其他标准类型不同)。

C语言当中的qsort函数

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

用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));

参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序

其实c中的函数不用死记,知道有这个函数及其功能就可以了,然后有用的时候,具体参数查一下就可以了。

希望能帮到你

C语言bsearch()和qsort()调用的比较函数是怎么实现比较的

qsort的最后一个参数是一个函数指针。通过这个函数指针把自己写的比较函数传给qsort. 这样的话qsort就可以知道如何比较大小,才能制定排序的标准。通过自己传入不同的比较函数,可以用qsort实现不同数据类型的排序。比如string, int, double, 甚至结构体。

采用这种手段的话,就可以复用排序的逻辑,而不必要为所有的数据类型都提供一个qsort函数。

同理bSearch函数里面也需要比较函数,道理是一样的。

如何利用C语言中的qsort库函数实现快速排序

声明一个字符串指针数组存放每个字符串的首地址,调用库函数qusort按题目要求对字符串指针排序,不移动源字符串。关键是要设计一个好的比较函数,精巧地解决“按长度、长度相等时按大小”排序的问题。举例代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

//#include "stdafx.h"//If the a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3njb3nhNWuWubrH-bmH-h0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3En1czrjDLn10v" target="_blank" class="baidu-highlight"vc++6.0/a, with this line.

#include "stdio.h"

#include "string.h"

#include "stdlib.h"

#define N 10 //字符串个数

#define LN 21 //限制字符串长度为20

int mycmp(const void *a,const void *b){//比较函数

char *pa=*(char **)a,*pb=*(char **)b;

int x=int(strlen(pa)-strlen(pb));//依长度比较

return x ? x : strcmp(pa,pb);//长度相等时依大小比较

}

int main(void){

int i=0,j=0;

char *f[N],w[LN*N];//声明a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3njb3nhNWuWubrH-bmH-h0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3En1czrjDLn10v" target="_blank" class="baidu-highlight"指针数组/af和字符串总空间

printf("Input %d string(s)(length=%d)...\n",N,LN);

while(iN){//输入并将字符串首址赋给f[i]

if(scanf(" %[1234567890]",f[i]=w+j)0 strlen(f[i])LN)

i++,j+=LN;

else printf("Error, redo: Required length less than %d:",LN);

}

qsort(f,N,sizeof(char *),mycmp);//调用a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3njb3nhNWuWubrH-bmH-h0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3En1czrjDLn10v" target="_blank" class="baidu-highlight"库函数/a对字符串指针排序

for(i=0;iN;printf("%s\n",f[i++]));//输出...

return 0;

}

c语言 qsort

排序方法有很多种,

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

看名字都知道快速排序

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

这就是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就认为

ab

,

如果比较函数返回等于0

qsort就认为a

和b

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

qsort就认为

ab

qsort

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

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

的(ab),你比较函数却返回一个

-1

(小于零的)那么qsort认为ab

的,就把

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

同样的道理,如果有一个

结构

strunt

人{

int

身高;

int

体重;

}

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


名称栏目:c语言qsort函数实现的简单介绍
文章转载:http://cqcxhl.com/article/doccgss.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP