数组排序,sort()函数

来源:7-22 数组排序sort()

juan_zi

2016-03-10 14:40

<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回答

  • 马不理
    2016-03-10 16:50:54
    已采纳

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

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

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

    //百度百科: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前面,然后,继续冒泡排序,现在的情况是,比较小的那个数往后排,这不就是降序吗?


    juan_z...

    回答的非常详细,理解啦,谢谢

    2016-03-10 22:58:38

    共 2 条回复 >

  • qq_听雨的奢侈_0
    2016-03-10 15:04:26

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

JavaScript进阶篇

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

468190 学习 · 21891 问题

查看课程

相似问题