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

小白关于数组排序的疑问

http://img1.sycdn.imooc.com//5959e01f0001f4db03920349.jpg

这里红线部分,我不明白在调用sort 进行排序时,具体是怎么工作的呢?本来sortNum()就是一个函数,现在指定sort 排序采用sortNum()进行。sortNum为两个参数,而数组中有六个元素啊??然后怎么弄?希望知道的大神能指点迷津,感激不尽

正在回答

3 回答

function sortNum1(t,d) {

    return d-t

   }

仅仅只是根据函数两个参数优先出现的顺序进行判断,括号里面先出现t,再出现d,如果你想按升序排就return t-d;

如果你想降序排那就return d-t;而且还只能对数字排序,对字符串还不能用这样的方法。

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

慕斯8308057 提问者

非常感谢!明白了
2017-07-19 回复 有任何疑惑可以回复我~

在函数里面加了一段   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
应该是一种优化版的冒泡排序法

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

利用sortNum()函数依次对数组中的两元素比较来判断是否交换位置。

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

慕斯8308057 提问者

如果是依次的话,他怎么知道什么时候应该停止调用呢?而且两两比较的时候本来第一次假如取出的数是80和16,那么明显按升序排列的话就应该交换位置。下一次就应该取50和6,同理也要交换位置。但是此时只看这四个数,排列就为:16,80,6,50。。。所以即使两两取出来比较,不能保证数组里面所有的数按升序排列的阿??我这样理解有不对吗?
2017-07-03 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

小白关于数组排序的疑问

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