js基础算法

排序

排序有很多种算法,这里只写基本的冒泡排序和快速排序

// 冒泡排序有两种
// 一种是依次比较相邻两个数字,如果前一个比后一个大,就交换位置,这样最后一位一定是最大的,依此类推
function bubbleSort(ary) {
  for (let i = 0, len = ary.length; i < len - 1; i++) {
    for (let j = 0; j < len - 1 -i; j++) {
      if (ary[j] > ary[j + 1]) {
        let temp = ary[j];
        ary[j] = ary[j + 1];
        ary[j + 1] = temp;
      }
    }
  }
  return ary;
}

// 一种是比较第一位与其他位的数字,如果第一位大于其他位的数字,就交换位置,这样第一位一定是最小的,
// 依此类推
function bubbleSort2(ary) {
  for (let i = 0, len = ary.length; i < len - 1; i++) {
    for (let j = i + 1; j < len; j++) {
      if (ary[i] > ary[j]) {
        let temp = ary[i];
        ary[i] = ary[j];
        ary[j] = temp;
      }
    }
  }
  return ary;
}

// 快速排序
function quickSort(ary) {
  if (ary.length <= 1) {
    return ary;
  }
  var index = Math.floor(ary.length / 2);
  var num = ary.splice(index, 1)[0];
  var left = [], right = [];
  for (let i = 0, len = ary.length; i < len; i++) {
    if (ary[i] < num) {
      left.push(ary[i]);
    } else {
      right.push(ary[i]);
    }
  }
  return quickSort(left).concat([num], quickSort(right));
}

去重

这里写三种方法

// 借助indexOf方法遍历
function unique(ary) {
  var res = [];
  for (let i = 0, len = ary.length; i < len; i++) {
    let num = ary[i];
    if (res.indexOf(num) == -1) {
      res.push(num)
    }
  }
  return res;
}

// 最快的
function unique1(ary) {
  var obj = {}, res = [];
  for (let i = 0, len = ary.length; i < len; i++) {
    let num = ary[i];
    if (!obj[num]) {
      obj[num] = true;
      res.push(num);
    }
  }
  return res;
}

// 借助sort方法排序,然后只比较相邻数字是否一样
function unique2(ary) {
  ary.sort();
  var res = [ary[0]];
  for (let i = 1, len = ary.length; i < len; i++) {
    if (ary[i] !== res[res.length - 1]) {
      res.push(ary[i]);
    }
  }
  return res;
}

你可能感兴趣的:(js基础算法)