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

数组排序,sort()函数

<script type="text/javascript">
 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));
</script>

这里为什么sortNum()函数里return a-b就定义了升序?

正在回答

2 回答

首先,题主要明确什么是冒泡排序。说白了就是两两比较

冒泡排序:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。

//百度百科:http://baike.baidu.com/link?url=x3j1m3MP7w4PCz0OhJF7cJCbGmVSfGeE5cdxeQtMmXjhIXubh45qb8J_ZX3EVtc2zkb1wEm0cXijFePkzlyOc_

接下来,让我们来看sort()方法

myArray.sort(sortMethod);

随便定义一个sortMethod函数:

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

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

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

这是什么意思呢就是说,计算机本身并不根据大小排序,它根据你写的sort()里面的函数,就是sortMethod,它的返回值来决定哪个数在先,哪个数在后。

 function sortNum(a,b)注意,这个a,b顺序是不变的,计算机根据函数返回值判断二者先后关系!!!

举个例子,a=100 b=20     a-b>=1说明a肯定比b大吧,然后就返回了1,sort方法一看,你这个返回值大于1啊,a就应该在b后面,然后继续比较下一组数,就是用冒泡排序的方法比较下一组数,你想,如果比较大的那个数往后排,这不就是升序吗?

然后,你想降序,把函数改成b-a了,现在sort方法得到的返回值是b-a的了,现在a还是100,b还是20,b-a<=-1,sort方法一看,你这个返回值小于-1啊,a就应该在b前面,然后,继续冒泡排序,现在的情况是,比较小的那个数往后排,这不就是降序吗?


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

juan_zi 提问者

很感谢!
2016-03-10 回复 有任何疑惑可以回复我~
#2

juan_zi 提问者

回答的非常详细,理解啦,谢谢
2016-03-10 回复 有任何疑惑可以回复我~

sort的参数,为一个函数,那么这个函数接受2个参数,a, b
这个函数在:
a == b 是为0
a > b 时为 1
a < b时 为-1

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

举报

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

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

进入课程

数组排序,sort()函数

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