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,是不是实现了上面的逻辑?所以就完成了排序。


推荐阅读