时间复杂度

常见的时间复杂度

执行函数

术语

12

O(1)

常数阶

2n+3

O(n)

线性阶

3n2 + 2n + 1

O(n2)

平方阶

O(logn)

对数阶 (logN底数默认为2)

O(nlogn)

nlogn阶

O(n3)

立方阶

O(2n)

指数阶

常用的时间复杂度耗时排序: 常数阶 < 对数阶 < 线性阶 < nlogn阶 < 平方阶 < 立方阶 < 指数阶

冒泡排序

每次比较相邻2个元素,如果顺序错误就交换位置。O(n2),不稳定

function bubbleSort(arr) {
  if (arr.length <= 1) {
    return arr
  }

  var len = arr.length

  for (var i = 0; i <= len - 1; i++) {
    for (var j = 0; j <= len -1; j++) {
      if (arr[j] > arr[j + 1]) {
        // var temp
        // temp = arr[j]
        // arr[j] = arr[j + 1]
        // arr[j + 1] = temp
        // 不通过临时变量实现变量交换
        arr[j + 1] = [arr[j], arr[j] = arr[j + 1]][0]
      }
    }
  }
  return arr
}

选择排序

首先找到未排序最小元素放到首位,再寻找剩余的最小往后排。O(n2),稳定

快速排序

取中间参照元素,小的放左数组,大的放右数组,再使用该方法继续排序。O(nlogn),不稳定

插入排序

在已排序的序列中从后向前扫描,找到相应位置并插入。 O(n2),稳定

二分搜索法

也称折半搜索,是一种在有序数组中查找特定元素的搜索算法。

  1. 首先从数组中间开始查找对比,若相等则找到,直接返回中间元素的索引。

  2. 若查找值小于中间值,则在小于中间值的那一部分执行步骤1的操作。

  3. 若查找值大于中间值,则在大于中间值的那一部分执行步骤1的操作。

  4. 否则,返回结果为查不到,返回-1。

无序的二分搜索

二叉树

二叉树的常用遍历为 前序遍历、中序遍历、后序遍历

数据源

广度优先遍历

bsf

数据源

深度优先遍历

dsf

数据源

递归遍历

数据源

动态规划

把原问题分解成子问题进行求解。

最大子序列之和

最长公共子串

最长公共子序列

背包问题

物品个数n=5,物品重量weights=[2,2,6,5,4],物品价值values=[6,3,5,4,6],背包总容量W=10

双向链表

Last updated