为了账号安全,请及时绑定邮箱和手机立即绑定

return a-b为什么是升序啊,有什么依据

function sortNum(a,b) {
 return a - b;
//升序,如降序,把“a - b”该成“b - a”

正在回答

4 回答

因为sort()函数使用的是冒泡排序,冒泡排序会重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,一直重复地进行直到说该数列已经排序完成。
如果a-b>0(即正数)就把a和b的位置交换,也就是较小的一个数会排到前面;
如果b-a>0就把a和b的位置交换,也就是较大的一个数会排到前面。


感觉这个知道就好,个人理解就是按照字母表顺序 a为1,b为2。 从小到大排序,反之则从大到小。

9 回复 有任何疑惑可以回复我~
#1

hengly 提问者

非常感谢!
2015-02-25 回复 有任何疑惑可以回复我~

function bubbleSort(arr) {

    var i = arr.length, j;

    var tempExchangVal;

    while (i > 0) {

        for (j = 0; j < i - 1; j++) {

            if (arr[j] > arr[j + 1]) {

                tempExchangVal = arr[j];

                arr[j] = arr[j + 1];

                arr[j + 1] = tempExchangVal;

            }

        }

        i--;

    }

    return arr;

}

 

var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8];

var arrSorted = bubbleSort(arr);

console.log(arrSorted);

alert(arrSorted);

这是什么鬼?

0 回复 有任何疑惑可以回复我~
#1

紫舞夜月

冒泡法的具体算法
2016-05-02 回复 有任何疑惑可以回复我~

不用理解太深,知道就好。不过这里解释一下,冒泡排序算法其实是一个比较有意思的东西。

看这个:

function bubbleSort(arr) {

    var i = arr.length, j;

    var tempExchangVal;

    while (i > 0) {

        for (j = 0; j < i - 1; j++) {

            if (arr[j] > arr[j + 1]) {

                tempExchangVal = arr[j];

                arr[j] = arr[j + 1];

                arr[j + 1] = tempExchangVal;

            }

        }

        i--;

    }

    return arr;

}

 

var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8];

var arrSorted = bubbleSort(arr);

console.log(arrSorted);

alert(arrSorted);

这里就解释了如果不断对元素进行重复替换的话,最后

return b-a就会形成升序,背后的原理算法导论有讲过,推倒过程实际上和数学上的各种公式怎么来性质是一样的。

4 回复 有任何疑惑可以回复我~

感觉return a-b,返回的就是一个差值,实际上起作用的就是sort方法,比较、交换元素的作用!共同理解,不知对否

2 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

return a-b为什么是升序啊,有什么依据

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信