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

无论是使用 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。故与上述规则不一致。
上一篇:[转]ExtJs入门之filefield:文件上传的配置+结合Ajax完美实现文件上传的asp.net示例


下一篇:Python中sort、sorted的cmp参数废弃之后使用cmp_to_key实现类似功能