zoukankan      html  css  js  c++  java
  • sort排序到底怎么排序

    sort()方法

    sort() 方法在适当的位置对数组的元素进行排序,并返回数组。

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <script>
                var arr=[1,11,2,22,5,4,0];
                arr.sort();
                alert(arr);//[0,1,11,2,22,4,5]
            </script>
        </head>
        <body>
        </body>
    </html>

    由上图可以看出:数组会按照字符的Unicode进行排序(把数组里面当成字符串处理)。

    按升序排列:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <script>
                var arr=[1,11,2,22,5,4,0];
                arr.sort(
                    function(n1,n2){
                        return n1-n2;
                    });
                alert(arr);//[0,1,2,4,5,11,22]
            </script>
        </head>
        <body>
        </body>
    </html>

    随机排序:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <script>
                var arr=[1,11,2,22,5,4,0];
                arr.sort(
                    function(n1,n2){
                        return Math.random()-0.5;
                    });
                alert(arr);
            </script>
        </head>
        <body>
        </body>
    </html>

    sort()方法如何实现排序

      怎么查看sort()方法是如果实现排序的呢?我们可以在比较函数里把a,b及数组输出一下,看看是否能够看出使用的排序算法。

    var arr=[1, 8, 3, 5, -1];
    function compare(a,b){
        console.log(a,b,arr);
        return a-b;
    }
    arr.sort(compare);
    /**
    控制台输出
    1 8 [1, 8, 3, 5, -1]
    8 3 [1, 8, 3, 5, -1]
    1 3 [1, 8, 8, 5, -1]
    8 5 [1, 3, 8, 5, -1]
    3 5 [1, 3, 8, 8, -1]
    8 -1 [1, 3, 5, 8, -1]
    5 -1 [1, 3, 5, 8, 8]
    3 -1 [1, 3, 5, 5, 8]
    1 -1 [1, 3, 3, 5, 8]
    [-1,1, 3, 5, 8]
    */

      第一次1和8比较,1<8,不需要调整位置。   

      第二次8和3比较,8>3,需要调整位置。但是这里没有交换位置,仅仅是8覆盖了3位置。这里就可以推断出不是单纯的使用了冒泡算法。
      第三是1和3比较,1<3,3替换了8的位置。什么鬼,几个意思???看到这里我也是表示不懂呀。那就继续往下看咯。   

      第四是8和5比较,8>5,又仅仅是覆盖,没有交换位置。还是不懂,继续往下!
      第五是3和5比较,3<5,5替换了8的位置,不懂,继续往下!   

      第六是8和-1比较,8>-1, 还仅仅是覆盖,继续往下!
      第七、八、九次,-1依次和5,3,1做了比较,并且5,3,1都移动了一次位置。

      我们得出了结论:sort()方法是使用的冒泡和插入两种方式结合进行排序的。

    模拟排序:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <script>
                var arr=[32,12,4,20,1,54,56,6,14];
                function findMinIndex(arr,start){
                    var iMin=arr[start];
                    var iMinIndex=start;
                    for(var i=start;i<arr.length;i++){
                        if(iMin>arr[i]){
                            iMin=arr[i];
                            iMinIndex=i;
                        }
                    }
                    return iMinIndex;
                }
                for(var i=0;i<arr.length;i++){
                    var n=findMinIndex(arr,i);
                    var tem;
                    tem=arr[n];
                    arr[n]=arr[i];
                    arr[i]=tem;
                }
                alert(arr);
            </script>
        </head>
        <body>
        </body>
    </html>
  • 相关阅读:
    Struts2完全解耦和
    storm 错误汇总
    sublime3 在ubuntu下不能输入中文
    sublime3 10款必备插件
    sublime3 SublimeREPL python3
    sublime3 Package Control不能使用
    Buffer ByteBuffer 缓冲区
    redis cluster批量插入
    延期执行的方案计策略汇总
    linux 免密登录
  • 原文地址:https://www.cnblogs.com/yang0901/p/6792531.html
Copyright © 2011-2022 走看看