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

关于数组排序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));

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

正在回答

5 回答

理解:

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

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

疑问:

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


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

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

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

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

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】的操作,直到所有的数都进行了两两比较。最后,排序结果也一步步修正得到了最终的结果。

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

慕婉清7712429

我觉得是不是只要循环比较一遍就可以了,把第一位当做A,其余的当做B,最后结果出来的顺序不是最后答案吗?
2018-07-11 回复 有任何疑惑可以回复我~
#2

慕婉清7712429

我觉得是不是只要循环比较一遍就可以了,把第一位当做A,其余的当做B,最后结果出来的顺序不是最后答案吗?,因为我真的计算了下,无论是把第一位当做A还是依次把剩下的几位当做A,最后的值按照从小到大来算,都是1,6,16,50,80,100,所以只要比较一次就可以了吧你回答中的答案绝对算错了
2018-07-11 回复 有任何疑惑可以回复我~
#3

PaulPierce

老哥 你认真再排排看?
2018-12-28 回复 有任何疑惑可以回复我~

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

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

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

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

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       467077    人
  • 解答问题       21874    个

本课程从如何插入JS代码开始,带您进入网页动态交互世界

进入课程

关于数组排序sort()

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