js中sort排序的原理是什么?

linkstar
  • 701

比方说下面这段代码:

<script type="text/javascript">

    function sortNumber(a,b) {
        return a - b
    }
    
    var arr = new Array(6)
    arr[0] = "10"
    arr[1] = "5"
    arr[2] = "40"
    arr[3] = "25"
    arr[4] = "1000"
    arr[5] = "1"
    
    document.write(arr + "<br />")
    document.write(arr.sort(sortNumber))

</script>

执行结果是:
10,5,40,25,1000,1
1,5,10,25,40,1000

为什么第二行输出的结果是升序而不是降序?sortNumber里面的a和b分别代表什么?a-b的值应该不是固定的吧,怎么传入sort里面怎么判断排序呢?希望能够给个详细的解释,谢谢!

评论
阅读 10.2k
2 个回答

借用宝地答一波
只要了解:数组中某两个值传入sort中的函数里并且返回值会决定数组重组方式(有点小绕)
然后复制代码到控制台

let arr = [10,5,40,25,1000,1]
let i = 1
function compare (a ,b) {
    console.log(`第${i}次循环 a = ${a} , b = ${b} 上次操作后的数组是 ${arr}`)
    i++
    return a - b 
}
arr.sort(compare)
console.log(`最后的数组是 ${arr}`)

最后输出结果是

第1次循环 a = 5 , b = 10 上次操作后的数组是 10,5,40,25,1000,1
第2次循环 a = 40 , b = 5 上次操作后的数组是 10,5,40,25,1000,1
第3次循环 a = 40 , b = 10 上次操作后的数组是 5,10,40,25,1000,1
第4次循环 a = 25 , b = 10 上次操作后的数组是 5,10,40,25,1000,1
第5次循环 a = 25 , b = 40 上次操作后的数组是 5,10,40,25,1000,1
第6次循环 a = 1000 , b = 25 上次操作后的数组是 5,10,25,40,1000,1
第7次循环 a = 1000 , b = 40 上次操作后的数组是 5,10,25,40,1000,1
第8次循环 a = 1 , b = 25 上次操作后的数组是 5,10,25,40,1000,1
第9次循环 a = 1 , b = 10 上次操作后的数组是 5,10,25,40,1000,1
第10次循环 a = 1 , b = 5 上次操作后的数组是 5,10,25,40,1000,1
最后的数组是 1,5,10,25,40,1000

大结局:我觉得挺直观,想给自己点赞?

sort方法接受一个比较器,这个比较器比较传入的两个参数:aba>b则返回正数a<b返回负数a==b返回0。然后sort调用内部实现的比较算法,配合这个比较器,就能排序了。

撰写回答

登录后参与交流、获取后续更新提醒

宣传栏