排序函数中比较函数cmp的理解

本文探讨了在使用cmp函数进行元素排序时的常见误解,指出直接使用条件语句可能导致的问题,并通过实例解释了正确的cmp函数实现方式。

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

无论是使用 sort() 或者 qsort(), 都会使用到自己定义比较函数,

习惯上定义为 cmp

如:

int cmp(const void *x, const void *y)  {
        return *(int*)x - *(int*)y;
}


我一直也是这样用,直到去年寒假给学弟们讲课的时候,有个学弟

问: 为什么不可以写成 :

 int cmp(const void *x, const void *y)  {
        return *(int*)x > *(int*)y;
}

当时我没有回答,而是说回去查查资料。

知道今天看网友博客的时候偶然间翻到了这样的一篇文章。

博客链接

上面这样说:

返回正数就是说 cmp 传入参数第一个要放在第二个后面负数就是传入参数第一个要放第二个前面如果是 0, 那就无所谓谁前谁后

所以对于上面学弟所说的那种方式, 是行不通的,因为 

*(int*)x > *(int*)y;
是一个条件语句, 为真时返回非零值, 为假时返回0。故与上述规则不一致。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值