无论是使用 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。故与上述规则不一致。

排序函数中比较函数cmp的理解的更多相关文章

  1. 个人对sort()排序方法中比较函数一直很混乱,今日理清

    需求:使用随机数来打印出0-10,并排序. 代码: var a = new Array();var testArray = function() { while (1) { var b = parse ...

  2. php中的常用数组函数(八) 排序函数汇总(sort、rsort、usort、asort、uasort、arsort、ksort、uksort、krsort、natsort、natcasesort、array_multisort)

    测试环境:php5.3.29 sort_flags 可以用以下值改变排序的行为: 排序类型标记: SORT_REGULAR - 正常比较单元(不改变类型) SORT_NUMERIC - 单元被作为数字 ...

  3. python之自定义排序函数sorted()

    sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面, ...

  4. 【译】高级T-SQL进阶系列 (七)【下篇】:使用排序函数对数据进行排序

    此文为翻译,由于本人水平有限,疏漏在所难免,欢迎探讨指正. 原文链接:传送门. 使用NTILE函数的示例 NTILE函数将一组记录分割为几个组.其返回的分组数是由一个整形表达式指定的.如下你会找到NT ...

  5. 【译】高级T-SQL进阶系列 (七)【上篇】:使用排序函数对数据进行排序

    [译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:传送门. 什么是排序函数(Ranking Functions)? 排序函数基于一组记录的集合返回一个排序值.一个排序值其实 ...

  6. C++ 中的sort()排序函数用法

    sort(first_pointer,first_pointer+n,cmp) 该函数可以给数组,或者链表list.向量排序. 实现原理:sort并不是简单的快速排序,它对普通的快速排序进行了优化,此 ...

  7. PHP:第四章——数组中的排序函数

    <pre> <?php header("Content-Type:text/html;charset=utf-8"); //1) /*sort - 对数组进行升序 ...

  8. c++排序相关的参数“cmp“的用法及理解

    对sort函数(需要algorithm头文件),它的cmp可以是"函数",也可以是"对象" bool myfunction (int i,int j) { re ...

  9. SQL中几个常用的排序函数

         最近使用窗口函数的频率越来越高,这里打算简单介绍一下几个排序的函数,做一个引子希望以后这方面的问题能够更深入的理解,这里先简单介绍一下几个简单的排序函数及其相关子句,这里先从什么是排序开始吧 ...

随机推荐

  1. angularjs中动态为audio绑定src问题总结

    先上代码 <div class="block_area block_audio" ng-show="model.url"> <audio co ...

  2. 【DM8168学习笔记1】帮您快速入门 TI 的 Codec Engine

    http://www.ti.com.cn/general/cn/docs/gencontent.tsp?contentId=61575 德州仪器半导体技术(上海)有限公司 通用DSP 技术应用工程师 ...

  3. 使用Maven编译运行Storm入门代码(Storm starter)(转)

    Storm 官方提供了入门代码(Storm starter),即 Storm安装教程 中所运行的实例(storm-starter-topologies-0.9.6.jar),该入门代码位于 /usr/ ...

  4. Redis源码解析:21sentinel(二)定期发送消息、检测主观下线

    六:定时发送消息 哨兵每隔一段时间,会向其所监控的所有实例发送一些命令,用于获取这些实例的状态.这些命令包括:"PING"."INFO"和"PUBLI ...

  5. 如何在 Flink 1.9 中使用 Hive?

    Apache Flink 从 1.9.0 版本开始增加了与 Hive 集成的功能,用户可以通过 Flink 来访问 Hive 的元数据,以及读写 Hive 中的表.本文将主要从项目的设计架构.最新进展 ...

  6. Django项目:CRM(客户关系管理系统)--31--23PerfectCRM实现King_admin数据删除

    登陆密码设置参考 http://www.cnblogs.com/ujq3/p/8553784.html # king_urls.py # ————————02PerfectCRM创建ADMIN页面—— ...

  7. 自定义确定框(confirm)

    1.先引入 confirm.css @charset "UTF-8"; lq-alert { width: 100%; height: 100%; background: rgba ...

  8. jnhs-SpringMVC的controller向jsp传递数据的五种方式

    参考此文http://blog.sina.com.cn/s/blog_6d3c1ec601014h1h.html 1 使用ModelAndVoew 引入:org.springframework.web ...

  9. Python学习笔记(六)Python组合数据类型

    在之前我们学会了数字类型,包括整数类型.浮点类型和复数类型,这些类型仅能表示一个数据,这种表示单一数据的类型称为基本数据类型.然而,实际计算中却存在大量同时处理多个数据的情况,这种需要将多个数据有效组 ...

  10. linux追加中文字库,解决imagemagick 中文乱码的问题。

    Windows下的字体丰富多样,而且显示的工整.漂亮. 所以自己想把windows上的字体移到Ubuntu下来.Windows下字体库的位置为C:\Windows\fonts,这里面包含所有windo ...