数据结构和算法

快速排序

思想/步骤: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(pivotIndex1);
      var left = [];
      var right = [];
      for (var i = 0i < arr.lengthi++){
        if (arr[i] < pivot) {
          left.push(arr[i]);
        } else {
          right.push(arr[i]);
        }
      }
      return quickSort(left).concat(pivotquickSort(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,truetrue,true,'NaN','NaN',NaN,'NaN','NaN',undefined,undefined,undefined,null,undefined,null,NaN,NaN,NaN0,01,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;
};
原文地址:https://www.cnblogs.com/shen076/p/6571609.html