Skip to content
此页目录
本文总阅读量

JavaScript 数组去重排序

数组去重

js
var arr = [9,9,0,0,2,3,2,3,5];
var a = [];
arr.forEach(function(item,index,arr){
  if(a.indexOf(item) == -1){
  // if(a.includes(item)){ // 或
    a.push(item);
  }
});

冒泡排序

js
// 二重循环,外层循环控制比较次数,内层,两两相邻进行比较换位,谁大谁换到后一位
for(var i = 0; i < arr.length; i++){
  for(var j = 0; j < arr.length - i; j++){// 循环相邻两位比较,外层每走一次,内层的循环最大值,就减小 i
    // 内层循环进行相邻的两两比较
    if(arr[j] > arr[j + 1]){// 如果前一项大于后一项,进行换位
      // 引入第3个变量,才能进行两个变量的值的交互
      var temp = arr[j];
      arr[j] = arr[j + 1];
      arr[j + 1] = temp;
    }
  }
}

选择排序

js
for(var i = 0; i < arr.length; i++){// 外层循环,控制每次选择的下标
  for(var j = i + 1; j < arr.length; j++){// 内层循环,控制 i 下标的后续下标
    if(arr[i] > arr[j]){
      // 比较选择的下标值和后续的下标的值,谁小就将谁换到选择的下标上来,然后在用选择的下标上换来的值和后续下标值进行比较
      var temp = arr[i];
      arr[i] = arr[j];
      arr[j] = temp;
    }
  }
}

递归排序

js
function qSort(arr){
  // 当 lArr 或 rArr 中只有一个数据项或没有数据项时,就返回该数组本身边界条件
  if(arr.length <= 1){
    return arr;
  }
  // 获取中间下标值
  var mIndex = Math.floor(arr.length / 2);
  // 截取中间下标对应的值
  var mVal = arr.splice(mIndex , 1)[0];
  // 创建左右空数组
  var lArr = [], rArr = [];// 千万不能 var lArr = rArr = [];
  // 遍历数组中剩余的数据项,当该数据项小于 mVal 就放到 lArr 中,当大于 mVal 就放到 rArr
  for(var i = 0; i < arr.length; i++){
    if(arr[i] < mVal){
      lArr.push(arr[i]);
    }else{
      rArr.push(arr[i]);
    }
  }
  // 合并返回新数组,切对 lArr 数组和 rArr 数组进行递归
  return qSort(lArr).concat(mVal, qSort(rArr));
}

评论

交流群