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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM