JS的排序方法,Array.prototype.sort(fun)是咋执行的( 二 )
■网友
不严谨地说,排序的主要操作有两个:比较、交换。也就是说一般的排序算法都是通过一定的逻辑循环,对待排序的数据进行两两“比较”,并根据比较的结果“交换”数据顺序,最终使数据达到一个有序状态。在这两种操作中,“交换”操作与数据类型无关,并且“交换”与否是由“比较”结果和排序算法来决定的,所以当排序算法确定(比如指定使用冒泡排序)时,“交换”部分的代码也就固定了。而“比较”代码则和需要排序的具体数据类型有关,并且与排序的需求(升序、降序等)有关,所以无法固定下来。那么如果由平台本身来实现通用的排序方法的话,就会出现很多函数:sortNumberAsc(dataList) //升序排列数字sortNumberDesc(dataList) //降序排列数字sortStringAsc(dataList) //升序排列字符串sortStringDesc(dataList) //降序排列字符串sortStringAscNoCase(dataList) //升序排列字符串并忽略大小写......实际上在上面这一堆排序函数里面,有区别的其实仅仅是“比较”这一个步骤,那么我们就可以考虑把“比较”操作交给程序员处理,而由平台实现其他部分,当排序算法需要“比较”两个数据时,调用程序员提供的“比较”函数,传入两个值,要求这个函数返回大于、小于、等于三种结果,排序算法根据这个结果进行数据“交换”。如此以来,以上的一堆函数就可以变成 sort(dataList, comparator) //根据比较器comparator的结果,排列任意数据
■网友
function里面是个比较器。由你来定义n1和n2的顺序,程序发现你反回负数时就认为n1\u0026lt;n2;反回正数时就认为n1\u0026gt;n2;返回0则认为它们相等。你返回了n1-n2,是不是实现了上面的逻辑?所以就完成了排序。
推荐阅读
- 长寿花怎么养护?掌握两大方法,乖乖花开“爆盆”,花香四溢!
- 有啥方法,网站,项目可以自己练习计算广告学
- 直播会成为品牌传播的另一个途径么有哪些可行的方法感觉有戏又没头绪好捉急。
- |邳州市岔河镇探索创新工作方法以“三个凝聚”助力统战工作提质增效
- 小孩|手术矫正要20万,有什么可以不动手术的方法?小孩有点地包天
- 孩子|小孩发烧的处理方法有物理降温与药物退烧!但很多新手父母不会
- 中兴努比亚 Z5 的边框到底有多窄
- 捷径|学会这套方法,考试高分不难高考历史复习有“捷径”
- 高血糖|71岁老人血糖从13.1降回正常,学会他的降糖方法, 你或也可以做到
- 乙肝|有乙肝不要怕,54岁大姐乙肝17年,肝没硬化,她的养肝方法可借鉴
