前端須要知道的數據結構與算法(持續更新中...)

基本數據結構

JS 數據類型

基本類型(棧 stack): Number String Boolean Null Undefined 和 Symbol(es6 新增)
引用類型(堆 heap):Object Array Function Data前端

數據結構

數據結構是指相互之間存在着一種或多種關係的數據元素的集合和該集合中數據元素之間的關係組成es6

算法

算法特徵

有窮性、肯定性、可行性、輸入、輸出算法

算法設計衡量

正確性、可讀性、健壯性, 時間複雜度, 空間複雜度數組

時間複雜度

運行一段程序的計算工做量,時間複雜度即一般所說的算法執行所須要耗費的時間,時間越短,算法越好。可是,一個算法的執行時間每每沒法精確估計。一般須要在實際的計算機運行才知道具體的執行時間。可是,也能夠大體進行估計,獲得算法的時間複雜度。算法的執行時間每每和算法代碼中語句執行的數量有關。數據結構

空間複雜度

運行一段程序的內存佔用,空間複雜度一般指的是算法程序在計算機只想中只想所須要的存儲空間。.net

eg:設計

O(1):常數運算code

O(n):1 層循環blog

O(n^2):2 層循環排序

O(n^n):n 層循環

O(log2n):int i = 1, n = 100;while(i < n){ i = i * 2;}

算法分類

  1. 快速排序算法
  2. 深度優先算法
  3. 廣度優先算法
  4. 堆排序算法
  5. 歸併排序算法

冒泡排序

原理:每次把最大或者最小的浮到最頂層

let arr = [33, 1, 46, 23, 35, 12, 30, 4, 16, 2]
function bubbleSort(array) {
  for (var i = 0; i < array.length; i++) {
    for (var j = 0; j < array.length - i - 1; j++) {
      if (array[j] > array[j + 1]) {
        var temp = array[j]
        array[j] = array[j + 1]
        array[j + 1] = temp
      }
    }
  }
  return array
}

插入排序

原理:從數組的第二個和第一個比較,若是小於第一個則插入到第一個元素以前,不然不變
第三個一次和第二個第一個比,若是小於第二個且大於第一個則插入第二個元素以前

let arr = [33, 1, 46, 23, 35, 12, 30, 4, 16, 2]
function insertionSort(arr) {
  var len = arr.length
  var preIndex, current
  for (var i = 1; i < len; i++) {
    preIndex = i - 1
    current = arr[i]
    while (preIndex >= 0 && arr[preIndex] > current) {
      arr[preIndex + 1] = arr[preIndex]
      preIndex--
    }
    arr[preIndex + 1] = current
  }
  return arr
}

選擇排序

原理:從數組的第一個開始,向後比較,找到最小的和第一個交換

let arr = [33, 1, 46, 23, 35, 12, 30, 4, 16, 2]
function selectionSort(arr) {
  var len = arr.length
  var minIndex, temp
  for (var i = 0; i < len; i++) {
    minIndex = i
    for (var j = i + 1; j < len; j++) {
      if (arr[minIndex] > arr[j]) {
        minIndex = j
      }
    }
    temp = arr[i]
    arr[i] = arr[minIndex]
    arr[minIndex] = temp
  }
  return arr
}

算法複雜度

排序方法 時間複雜度(最壞) 時間複雜度(最好) 空間複雜度 穩定性 複雜性
冒泡排序 O(n^2) O(n) O(1) 穩定 簡單
插入排序 O(n^2) O(n) O(1) 穩定 簡單
選擇排序 O(n^2) O(n^2) O(1) 不穩定 簡單

參考

  1. 前端你應該瞭解的數據結構與算法
  2. 如何理解時間複雜度和空間複雜度 3. 時間複雜度和空間複雜度
相關文章
相關標籤/搜索