理解sort()函数的排序原理

看了很多关于sort()函数的定义和解释还是不太清楚,尤其是初学者很容易看懵,这里讲讲自己是如何理解的。 

首先,要理解sort()内部是利用递归进行冒泡排序的;

例如:

var arr = [1, 5, 4, 2];

sort()方法的比较逻辑为:
第一轮:1和5比,1和4比,1和2比
第二轮:5和4比,5和2比
第三轮:4和2比

其次,sort()方法会接受一个比较函数compare(a, b),该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。

最后,永远要记住一句话,凡是返回1或者大于0的正数的时候就要交换位置。(内部实现)

例如:

var arr = [1, 5, 4, 2];

现在要进行升序排列,从左到右的数组项关系最终应该为: a < b < c < d 
所以只要在当a大于b的时候去交换它们的位置就好了:

if(a > b ) {
    return 1;
}

简化后:

// 升序
return a - b;
// 倒序
return b - a;



var arr = [2,34,242,12,3,2,23,3];// 定义一个数组
 
arr.sort(function (a,b) {
     // a -->代表每一次执行匿名函时候,找到的数组中的当前项;
     // b -->代表当前项的后一项;
 
     return a - b; // 升序时: 如果a>b,那么返回的值>0,a和b交换位置;
return b - a; // 降序时: 如果b>a,那么返回的值>0,a和b交换位置; //-> 原理:return的值可能是一个大于0的数也或者可能是小于等于0的数,如果return后的值大于0则让数组a和b交换一下位置;小于等于0,则原来数组中的位置不变; return 1; // 表示不管a和b谁大,每一次都返回一个恒大于0的数,也就是说每一次a和b都要交换位置,最后的结果就是原有数组倒过来排列了,相当于数组的reverse()方法; })
posted @ 2019-05-29 04:17  寒江孤影,江湖路人  阅读(2597)  评论(0编辑  收藏  举报