C语言qsort函数的使用

本文介绍了qsort函数的基本用法,包括其组成、cmp函数的定义,以及如何用于多维数组的排序。通过实例展示了增序和降序排列,并讨论了指针在处理复杂排序需求中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

qsort函数,好用!

但是不能过度依赖,自己也得掌握一些排序方法

现在进行一些关于qsort函数的介绍

基本信息

头文件:

#include<stdlib.h>

qsort使用时的组成:

qsort(num, n, sizeof( ), cmp);

其中,num为数组名,n为要排序的元素个数(当然是从0到n - 1位置的元素),sizeof( )括号里填数据类型,其中cmp是函数名,是接下来要讲的

cmp函数的定义:

int cmp(const void * a,const void * b)
{
	//函数内容
}

上面部分是这么定义的,而函数内容就关乎到大小的排序和需要排序的元素类型了

int cmp(const void * a,const void * b)
{
	return * (int *) a - * (int *) b;
}

这是增序排列(即从小到大),即如果a > b所指地址上的数,返回正数就可以实现增序排列

想要降序反过来就可以

int cmp(const void * a,const void * b)
{
	if(* (double *) a > * (double *) b)
        return 1;
    else
        return -1;
}
//需要注意的是,因为浮点数存储的时候有误差,最好返回值由自己来写

其他类型的都可以自己类推,只要注意强制转换的改变就行

qsort对多维函数的排序

我做题的时候,往往困扰于想偷懒的时候,要排序的对象是二维数组,不会用qsort怎么办

在最近复习了指针之后,想到了一个使用qsort对多维数组排序的方法,发现居然可行,而且帮我一道题get到了满分

接下来以二维数组为例

假设有一二维数组:

num[1000][3]

现在需要根据其一维上的第二个元素进行增序排序

可以这么使用qsort:

qsort(num, 1000, 3 * sizeof(int), cmp);

int cmp(const void * a, const void * b)
{
    return * ((int *) a + 1) - * ((int *) b + 1);
}

可以发现qsort中sizeof前面乘了一个3(一维上的元素个数)而返回值是根据指针的使用方法得到的一维上的第二个元素

如果熟悉指针的原理的话就可以看懂了

也可以进一步使用qsort

如,根据第二个元素进行降序排序,如果第二个元素相同的话,就根据第一个进行降序序排序,再相同就根据第三个:

qsort(num, 1000, 3 * sizeof(int), cmp);

int cmp(const void * a,const void * b)
{
	if(* ((int *) a + 1) > * ((int *) b + 1))
        return -1;
    else if(* ((int *) a + 1) == * ((int *) b + 1))
        if(* (int *) a > * (int *) b)
            return -1;
        else if(* (int *) a == * (int *) b)
            return  * ((int *) b + 2) - * ((int *) a + 2);
        else
            return 1;
    else
        return 1;
}

在cmp函数上做文章,就可以满足不同情况下的排序要求

好用!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值