zoukankan      html  css  js  c++  java
  • sort的排序及使用

    sort() 方法在适当的位置对数组的元素进行排序,并返回数组。数组会按照字符的Unicode进行排序(把数组里面当成字符串处理)

    1. 按升序排列:

    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]

    2. 随机排序:

    var arr=[1,11,2,22,5,4,0];
                arr.sort(
                    function(n1,n2){
                        return Math.random()-0.5;
                    });
     alert(arr);

     3. 按降序排列:

    var arr=[1,11,2,22,5,4,0];
                arr.sort(
                    function(n1,n2){
                        return n2-n1;
                    });
    alert(arr);

     4. 根据参数属性值排序(sort方法接收一个函数作为参数,这里嵌套一层函数用来接收对象属性名,其他部分代码与正常使用sort方法相同。

    var arr = [
        {name:'zopp',age:0},
        {name:'gpp',age:18},
        {name:'yjj',age:8}
    ];
    
    function compare(property){
        return function(a,b){
            var value1 = a[property];
            var value2 = b[property];
            return value1 - value2;
        }
    }
    console.log(arr.sort(compare('age')))

    5. 根据参数不同,来确定是升序排列,还是降序排序

    sortBy: function(attr,rev){
        //第二个参数没有传递 默认升序排列
        if(rev ==  undefined){
            rev = 1;
        }else{
            rev = (rev) ? 1 : -1;
        }
        return function(a,b){
            a = a[attr];
            b = b[attr];
            if(a < b){
                return rev * -1;
            }
            if(a > b){
                return rev * 1;
            }
            return 0;
        }
    }
    newArray.sort(sortBy('number',false))

    V8 引擎 sort 函数只给出了两种排序 InsertionSort 和 QuickSort,数量小于10的数组使用 InsertionSort,比10大的数组则使用 QuickSort。

    原理:sort()方法如何实现排序

    第一次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()方法是使用的冒泡和插入两种方式结合进行排序的。

    模拟排序:

     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);

    参考:https://www.cnblogs.com/yang0901/p/6792531.html

             https://blog.csdn.net/u011250873/article/details/78731162

  • 相关阅读:
    【转载】nio介绍+原理+传统IO原理+与传统IO区别+案例
    【Ubuntu】制作执行脚本 | 打包一串命令顺序执行
    Ubuntu 使用教程集锦
    【转载】自定义地图数据瓦片化请求的一种实现方案
    【转载】ROS机器人程序设计 | 期末知识点大总结
    【转载】三维重建(三)相机参数标定与光束平差法(Bundle Adjustment)
    【阅读笔记】《大话数据挖掘》定义和功能
    【转载】C++对象成员与构造函数
    【转载】IP地址和子网划分学习笔记之《子网掩码详解》
    STM32的启动过程一
  • 原文地址:https://www.cnblogs.com/panax/p/11045538.html
Copyright © 2011-2022 走看看