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

关于数组排序sort()

function sortNum(a,b) {
  return a - b;
 //升序,如降序,把“a - b”该成“b - a”
}
 var myarr = new Array("80","16","50","6","100","1");
  document.write(myarr + "<br>");
  document.write(myarr.sort(sortNum));

如上代码,是基于什么原理将数组排序的呢?

提问者:qq_两脚踢翻尘世界_0 2018-05-24 11:14

个回答

  • FreudLi
    2018-12-13 15:49:19

    理解:

    document.write(myarr.sort(sortNum))此行的意思是myarr.sort()按照sortNum两两比较进行排序。

    因为 arrayObject.sort(方法函数) 按照按unicode码顺序排列,而unicode码下 a > b ,

    疑问:

     那么return a-b; 结果为真还是为假,  函数 sortNum 返回值是a还是b?


  • 一叶红尘
    2018-07-28 13:35:00

    因为本身a>b。不信你把a,b换成e,f或者m,o,会是一样的

  • imooc客服
    2018-06-15 10:47:39

    可以这样来理解,不一定科学正常,但是有助于理解。

    JS自动排序,结果一下子就出来了,为了方便理解,我们可以把这个JS运算过程放慢一些,过程分解成很多小的步骤。

    就以此问题中的数字排序为例。

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

    要将这代码中的数字排序,就要用到排序函数,而排序函数只对2个字进行比较。为了达成排序目的,程序就自动地把数组里的所有2个字都进行了【a-b】的操作。

    1. 首先,把第1位数“80”当作a,把其它数字当作b,此时,要完成的操作有80-16,80-5,80-6,80-100,80-1。经过这一轮排序后,初步排序结果基本上是16,50,6,1,80,100。因为还有数没有进行两两相减进行比较,所以还要继续进行下面的操作。

    2. 现在,把第2位数“16”当作a,把其它数当作b, 此时,要完成的操作有16-50,16-6,16-100,16-1。这次的排序结果,在上一轮结果上再进行比较排序,改正其中几个不对的。现在的排序结果初步是6,1,16,50,80,100。

    3. 同理,接下来,其它所有的数继续进行【a-b】的操作,直到所有的数都进行了两两比较。最后,排序结果也一步步修正得到了最终的结果。

  • 慕前端9241162
    2018-06-14 16:36:45

    他是怎么把参数传到这个sortNum()函数里面的那?

  • JRain_
    2018-05-24 14:18:08

    通过两数相减是大于0还是小于0判断两数大小从而排序