导航


HTML

CSS

JavaScript

浏览器 & 网络

版本管理

框架

构建工具

TypeScript

性能优化

软实力

算法

UI、组件库

Node

冷门技能

⭐ 不借助临时变量,进行两个整数的交换

var a = 2, b = 4;
// 使用“和”形式
function swap(a, b) {
  a = a + b; // 此时 a 等于两数之和
  b = a - b; // 两数之和 减 b 为 a,此时 b 为 a
  a = a - b; // 两数之和 减 b,相当于减 a,此时 a 为 b
  return [a, b];
}
// 利用解构赋值
function swap(a, b) {
  [a, b] = [b, a];
  return [a, b];
}

排序算法

⭐ 冒泡

var arr = [3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48];

function bubbleSort(arr) {
  var len = arr.length, temp;
  for(var i=0; i<len-1; i++) {
    for(var j=0; j<len-i-1; j++) {
      if(arr[j] > arr[j+1]) {
        temp = arr[j];
        arr[j] = arr[j+1];
        arr[j+1] = temp;
      }
    }
  }
  return arr;
}

⭐ 快排

var arr = [3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48];

function quickSort(arr) {
  if (arr.length <= 1) return arr;
  var leftArr = [], rightArr = [], q=arr[0];
  for(var i=1; i<arr.length; i++) {
    if (arr[i] > q) {
    	rightArr.push(arr[i]);
    } else {
      leftArr.push(arr[i]);
    }
  }

  return [].concat(quickSort(leftArr), [q], quickSort(rightArr));
}

深度遍历广度遍历的区别?

对于算法来说 无非就是时间换空间 空间换时间

  1. 深度优先不需要记住所有的节点, 所以占用空间小, 而广度优先需要先记录所有的节点占用空间大
  2. 深度优先有回溯的操作(没有路走了需要回头)所以相对而言时间会长一点
  3. 深度优先采用的是堆栈的形式, 即先进后出
  4. 广度优先则采用的是队列的形式, 即先进先出