排序函数中比较函数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。故与上述规则不一致。

你可能感兴趣的:(排序)