数据结构和算法
快速排序
思想/步骤:1.在数组里随便找一个数作为基数(一般为第一个);
2.从右往左找,找到一个小于基数的值,与基数交换位置;
3.从左往右找,找到一个大于基数的值,与基数交换位置;
4.重复上面两步(其实不是重新从头找,而是保留上次查找的指针),直到基数左边全部小于它,右边全部大于它(其实就是左右指针都指向同一数),这就是一趟快排。
5.对左边和右边都进行上面1-4步。
var quickSort = function(arr) {
if (arr.length <= 1) { return arr; }
var pivotIndex = Math.floor(arr.length / 2);
var pivot = arr.splice(pivotIndex, 1);
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));
};
数组去重
Array.prototype.uniq = function () {
var resArr = [];
var flag = true;
for(var i=0;i<this.length;i++){
if(resArr.indexOf(this[i]) == -1){
if(this[i] != this[i]){ //排除 NaN
if(flag){
resArr.push(this[i]);
flag = false;
}
}
else{
resArr.push(this[i]);
}
}
}
return resArr;
}
var arr=[false, 'NaN',false,false,true, true,true,'NaN','NaN',NaN,'NaN','NaN',undefined,undefined,undefined,null,undefined,null,NaN,NaN,NaN, 0,0, 1,1, {}, {}, 'a', 'a',NaN,NaN,true]
console.log(arr.uniq());
判断数组a是否包含b
function is_array_contain(a,b){//判断数组a是否包含b
for(var i=0;i<b.length;i++){
var flag = false;
for(var j=0;j<a.length;j++){
if(b[i]===a[j]){
flag = true;
break;//防止继续无用功
}
}
if(!flag){
return false;
};
}
return true;
}
数组乱序
arr.sort(function(a){
return Math.random()>.5 ? 1 : -1;
});
或者用下面的,性能更加好
Array.prototype.shuffle = function() {
for(var j, x, i = this.length; i; j = parseInt(Math.random() * i), x = this[--i], this[i] = this[j], this[j] = x);
return this;
};