为了账号安全,请及时绑定邮箱和手机立即绑定

为什么比较函数的定义是那个?

比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。

什么叫做x应该排在y的前面?x小还是y小啊?感觉好像是y比x小,x要在y的前面返回值为-1就可以倒序,这里面的过程又是怎么实现的呢?如果-1变1,1变-1,是不是就是正序排序的比较函数定义啊?

正在回答

3 回答

x小还是y小是由自己定义的,x在y前面的意思就是字面的意思,x=1,y=2,if x>y,return -1,if x<y,return 1:这种情况时输出的就是2,1;if x>y,return 1,if x<y,return -1:这种情况时输出的就是1,2

0 回复 有任何疑惑可以回复我~
#1

Mymusic 提问者

我想到了数学里面的两个数比较大小就是作差,x-y>0就是x比y大即x>y返回-1,排序就为y,x。同理,x-y<0即x<y时,返回1,排序就为x,y。你那个东东怎么感觉有四种情况,应该删掉两句话。因为除0之外,非此即彼。
2015-10-10 回复 有任何疑惑可以回复我~

JS的sort函数,在不同的引擎下,有不同的sort实现机制。

V8 引擎 sort 函数只给出了两种排序 InsertionSort 和 QuickSort,数量小于10的数组使用 InsertionSort,比10大的数组则使用 QuickSortv8- array.js源码

Mozilla/Firefox : 归并排序(jsarray.c 源码

Webkit :底层实现用了 C++ 库中的 qsort() 方法JSArray.cpp 源码


参考链接1:https://segmentfault.com/q/1010000007133473?_ea=1247880

参考链接2 :https://www.cnblogs.com/huoxiao/p/10239284.html




0 回复 有任何疑惑可以回复我~

我对这块也非常大疑惑,引入这个知识点时有点太直接粗暴了,不理解。首先应该讲清楚返回1和-1或者0都会对sort函数产生什么影响,然后再讲如果定义为x>y返回-1这种定义套进去演绎一下,这样才明白,甚至您提到了冒泡法,那是很夸张的排序,每个最大数都要全部比较一遍才找到自己位置,接下来第二大的还要循环走一遍,这些是sort内部接受这个自定义的函数后的真实运作机制吗?

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

为什么比较函数的定义是那个?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信