zoukankan      html  css  js  c++  java
  • js数组快速排序/去重

    数组的排序

     快速排序

    思路:

    (1)在数据集之中,选择一个元素作为”基准”(pivot)。 
    (2)所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边。 
    (3)对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

    function quickSort(arr){
    if (arr.length <= 1){return arr};
    var pivotIndex = Math.floor(arr.length / 2);
    var pivot = arr.splice(pivotIndex,1)[0];
    var left = [];
    var right = [];
    for (var i = 0; i < arr.length; i++){
    if(arr[i] < pivot) {
    left.push(arr[i]);
    }else{
    right.push(arr[i]);
    }
    }
    return quickSort(left).concat([pivot],quickSort(right));
    }

     

    数据去重

    第一种方法:(不推荐)

    思路:

    1.构建一个新的数组存放结果

    2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比

    3.若结果数组中没有该元素,则存到结果数组中

    Array.prototype.unique1 = function()
    {
        var n = []; //一个新的临时数组
        for(var i = 0; i < this.length; i++) //遍历当前数组
        {
            //如果当前数组的第i已经保存进了临时数组,那么跳过,
            //否则把当前项push到临时数组里面
            if (n.indexOf(this[i]) == -1) n.push(this[i]);
        }
        return n;
    }

    第二种方法:比上面的方法效率要高,但是还是不推荐

    思路:

    1.先将原数组进行排序

    2.检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置

    3.如果不相同,则将该元素存入结果数组中

    Array.prototype.unique2 = function()
    {
        this.sort();
        var re=[this[0]];
        for(var i = 1; i < this.length; i++)
        {
            if( this[i] !== re[re.length-1])
            {
                re.push(this[i]);
            }
        }
        return re;
    }

    第三种方法:推荐

    思路:

    1.创建一个新的数组存放结果

    2.创建一个空对象

    3.判断数组值是否已经保存在object中,未保存则push到新数组并用object[arrayItem]=1的方式记录保存

    Array.prototype.unique3 = function(){
        var res = [];
        var json = {};
        for(var i = 0; i < this.length; i++){
            if(!json[this[i]]){
                res.push(this[i]);
                json[this[i]] = 1;
            }
        }
        return res;
    }
    
    var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
    alert(arr.unique3());

    转自http://www.jb51.net/article/42090.htm

  • 相关阅读:
    Jhipster 一个Spring Boot + Angular/React 全栈框架
    从企业架构到智慧油田的理论与实践
    DevExpress VCL 的 cxDBTreeList 的使用方法
    Delphi 三层框架 DataSnap 的服务器端设置
    雷达方程
    雷达方向信号产生
    目标
    流水线&并行处理
    CORDIC原理与FPGA实现(2)
    CORDIC原理与FPGA实现(1)
  • 原文地址:https://www.cnblogs.com/myzy/p/5228308.html
Copyright © 2011-2022 走看看