js数组快速排序/去重

数组的排序

var arr = [];

for(var i=0;i<20;i++){  
    arr.push(Math.floor(Math.random()*100))  
}  
//生成一个无序的arr数组  
function sort(arr,start,end){  
    //数组长度为1  
    if(start == end ){  
        return [arr[start]]  
    }else if(start == end-1){  
        //数组长度为2,根据数值大小 来排序  
        if(arr[start]>arr[end]){  
            return [arr[end],arr[start]]  
        }else{  
            return [arr[start],arr[end]]  
        }  
    }  
    // 数组长度一半  
    var l = Math.floor((start+end)/2);  
    //左边数组  
    var arrLeft = sort(arr, start,l);  
    //右边数组  
    var arrRight = sort(arr,l+1,end);  
    //返回结果  
    var result = [];  
    //分割成两部分 左右两个数组 只比对数组中的第一个数,那个数值小就把谁放到结果里面,并把小的数值删除掉,固采用数组中的shift方法。一旦出现左边数组或右边数组,没有数据的时候  
    //result数组就与还有数据的数组合并 采用 concat,并返回结果  
    while(arrLeft.length>0 || arrRight.length>0){  
        if(arrLeft.length==0){  
            result = result.concat(arrRight);  
            break;  
        }else if(arrRight.length==0){  
            result = result.concat(arrLeft);  
            break;  
        }  
        if(arrLeft[0]<arrRight[0]){  
            result.push(arrLeft.shift())  
        }else{  
            result.push(arrRight.shift());  
        }  
    }  
    return result;  
}  
var arrSort = sort(arr,0,arr.length-1);//参数 数组,开始位置,结束位置

document.write(arr+‘<br/>‘+arrSort);

数据去重

var arr = [];  
for(var i=0;i<20;i++){  
    arr.push(parseInt(Math.random()*10));  
}  
Array.prototype.indexOf = function(n){  
    for(var i=0;i<this.length;i++){  
        if(this[i] == n){  
            return i;  
        }  
    }  
    return -1;  
}  
function removeDup(arr,s,e){  
    if(s==e){  
        //分割就剩下一个  
        return [arr[s]]  
    }else if(s==e-1){  
        //为了优化 剩下两个就不用分割啦  
        if(arr[s]==arr[e]){  
            return [arr[s]]  
        }else{  
            return [arr[s],arr[e]];  
        }  
    }  
    //数组平分成两段,  
    var l = Math.floor((s+e)/2);  
    //左边  
    var arrL = removeDup(arr,s,l);  
    //右边  
    var arrR = removeDup(arr,l+1,e);  
    //结果 先把左边的复制进去  
    var result = arrL;  
    //循环 将不重复的数据插入到结果里面  
    for(var i=0;i<arrR.length;i++){  
        if(result.indexOf(arrR[i])== -1 ) result.push(arrR[i])  
    }  
    return result; //返回结果  
}  
var arrDup = removeDup(arr, 0, arr.length-1);  
document.write(arr+‘<br/>‘+arrDup);

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

时间: 2024-10-11 01:17:52

js数组快速排序/去重的相关文章

js 数组&amp;字符串 去重

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; } Array.prototype.unique2 = funct

js 数组深度去重

在日常开发中难免会遇到数组去重的难题,最近,正是给一个数组去重的难题难到了.作为开发者的我们,一旦遇到问题必然就是谷歌,百度,MDN....搜索一波,但是,这些地方都没有找到我想要的答案.或许看到这你会开喷了,咋没有啊,网上一大堆去重方法,但是,这里的需求要的是深度去重,也就是说,引用类型也要去掉!!这时你会发现很多方法都不管用了,看了一波度娘的答案,绝大部分的都是循环,索引相等的方法去重,而且举的例子都是基本数据类型的去重,如果手上拿的是一个全是引用类型的数组,你会发现这些方法都没用了.在讲正

js数组快速排序

<script type="text/javascript"> var arr = [1, 2, 3, 54, 22, 1, 2, 3]; function quick(arr) { if (arr.length <= 1) return arr; var proiindex = Math.floor(arr.length / 2); var proift = arr.splice(proiindex, 1)[0]; //找基准,并把基准从原数组删除 var left

js数组的去重与降维

// 降维 $(document).ready(function(){ var shapes = [ [ [[0, 4], [0, 5], [1, 4], [1, 5]] ], [ [[0, 3], [0, 4], [0, 5], [0, 6]], [[0, 4], [1, 4], [2, 4], [3, 4]] ], [ [[0, 4], [1, 4], [1, 5], [2, 5]], [[0, 4], [0, 5], [1, 3], [1, 4]] ], [ [[0, 5], [1, 4]

原生JS数组对象去重方法

function uniqueArr(arr){ var hash = []; for(var i=0;i<arr.length;i++){ var flag = true; for(var j=0;j<hash.length;j++){ if(arr[i].ids == hash[j].ids){ flag = false; } } if(flag){ hash.push(arr[i]); } } return hash; } 传入有重复对象的一个数组arr,使用对象中唯一标识ids区分对象

Js 数组返回去重后的数据

function removeRepeat(data) { var temp = ""; var mainData = []; for (var i = 0; i < data.length; i++) { if (!data[i].parent) { temp = data[i]; for (var j = 0; j < data.length; j++) { if (temp.DeliveryType == data[j].DeliveryType) { data[j]

js数组合并去重

var a = [1, 2, 3], b = [101, 2, 1, 10]; var c = a.concat(b.filter(function (item) { return a.indexOf(item) < 0; }));

js数组去重的方法

1.如果不借助任何方法,初级写法应该是: function unique(arr){ var res=[]; for(var i=0,len=arr.length;i<len;i++){ var obj = arr[i]; for(var j=0,jlen = res.length;j<jlen;j++){ if(res[j]===obj) break; } if(jlen===j)res.push(obj); } return res; } var arr=[1,1,'2','1',3,4]

js 数组去重(数组元素是对象的情况)

js数组去重有经典的 几种方法 但当数组元素是对象时,就不能简单地比较了,需要以某种方式遍历各值再判断是否已出现. 因为: 1.如果是哈希判断法,对象作哈希表的下标,就会自动转换成字符型类型,从而导致所有元素都相等,这时判断方法不再有意义.一般最后数组就只剩一个 2.如果是直接比较法,则因为对象在内存中是按引用访问的,属性值相同的对象也不会相等,简单的直接判断不再有意义.一般最后数组还是原样 所以就需要进行值的比较 当然了,也可以换着法来将相应对象转为字符串(不是默认的那种[object Obj