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

查看:154
本文介绍了javascript - js中sort排序的原理是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

比方说下面这段代码:

<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里面怎么判断排序呢?希望能够给个详细的解释,谢谢!

解决方案

可以理解为使用冒泡排序的原理。

示例简化如下:

var array = [10,5,40,25,1000,1];

array.sort(compareFunction);

function compareFunction(a, b) {
    return a - b;
}

console.log(array);

参数a和b,就是依次从array数组中取连续的两个元素,如从示例中先选择前两个元素:10, 5。
所以,在匿名函数内 a - b 的结果是 5。

再看下,匿名函数的结果跟排序的关系:
如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。备注:ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);
如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。
compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。

所以,示例是按照 compareFunction(a, b) 的返回值来排序的。

参考文档:https://developer.mozilla.org...

这篇关于javascript - js中sort排序的原理是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆