js數組快速排序/去重

數組的排序json

 快速排序數組

思路:ui

(1)在數據集之中,選擇一個元素做爲」基準」(pivot)。 
(2)全部小於」基準」的元素,都移到」基準」的左邊;全部大於」基準」的元素,都移到」基準」的右邊。 
(3)對」基準」左邊和右邊的兩個子集,不斷重複第一步和第二步,直到全部子集只剩下一個元素爲止。this

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

 

 

 

數據去重spa

第一種方法:(不推薦)
.net

思路:prototype

1.構建一個新的數組存放結果code

2.for循環中每次從原數組中取出一個元素,用這個元素循環與結果數組對比htm

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

相關文章
相關標籤/搜索