问答详情
源自:7-22 数组排序sort()

关于a-b和b-a有关的排序问题

function sortNum(a,b) {

        return b-a;

   }

var myarr = new Array("80","16","50","6","100","1");

document.write(myarr.sort(sortNum));

这里函数sortNum()里面执行的return b-a;意思返回b-a的值。我的理解是调用的时候不应该返回的是差值吗?比如数组var myarr = new Array("80","16","50","6","100","1");调用返回的应该是前后两数的差值啊,怎么就变成了排序而不是差值呢?一直理解不了,求大神们赐教

提问者:qq_唯爱YOU_0 2017-05-19 15:10

个回答

  • ESKY3687376
    2017-07-21 16:04:47

    在函数里面加了一段   document.write("(a-b)="+(a-b)+"</br>");终于看明白了
    (a-b)=64----第一次调用函数:a是80,b是16,结果为64>0,因此交换位置:16,80,50,6,100,1
    (a-b)=30----第二次调用函数:a是80,b是50,结果为30>0,因此交换位置:16,50,80,6,100,1
    (a-b)=-34----第三次调用函数:a是16,b是50,结果为-34<0,因此不交换位置:16,50,80,6,100,1
    (a-b)=74----第四次调用函数:a是80,b是6,结果为74>0,因此交换位置:16,50,6,80,100,1
    (a-b)=44----第五次调用函数:a是50,b是6,结果为44>0,因此交换位置:16,6,50,80,100,1
    (a-b)=10----第六次调用函数:a是16,b是6,结果为10>0,因此交换位置:6,16,50,80,100,1
    (a-b)=-20----第七次调用函数:a是80,b是100,结果为-20<0,因此不交换位置:6,16,50,80,100,1
    (a-b)=99----第八次调用函数:a是100,b是1,结果为99>0,因此交换位置:6,16,50,80,1,100
    (a-b)=79----第九次调用函数:a是80,b是1,结果为79>0,因此交换位置:6,16,50,1,80,100
    (a-b)=49----第十次调用函数:a是50,b是1,结果为49>0,因此交换位置:6,16,1,50,80,100
    (a-b)=15----第十一次调用函数:a是16,b是1,结果为15>0,因此交换位置:6,1,16,50,80,100
    (a-b)=5----第十二次调用函数:a是6,b是1,结果为5>0,因此交换位置:1,6,16,50,80,100
    1,6,16,50,80,100
    应该是一种优化版的冒泡排序法

  • AlivePlayer
    2017-06-19 15:06:21

    .如果指定<方法函数>,则按<方法函数>所指定的排序方法排序。myArray.sort(sortMethod);

    注意: 该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下: 

      若返回值<=-1,则表示 A 在排序后的序列中出现在 B 之前。
      若返回值>-1 && <1,则表示 A 和 B 具有相同的排序顺序。
      若返回值>=1,则表示 A 在排序后的序列中出现在 B 之后。


  • qq_only哎you_0
    2017-05-29 22:25:46

    你可以举个例子,比如10和11,return  10-11.结果是-1,说明是升序

  • 慕粉1322178931
    2017-05-19 15:23:55

    你定义的函数需要传两个参数,myarr.sort(sortNum)这个着实是看不懂,如果你想求数组俩数的差值就传进去两个参数,例如sortNum(myarr[0],myarr[1]),myarr.sort,是系统自带的排序