數組的排序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