基本数据结构JS 数据类型基本类型(栈 stack): Number String Boolean Null Undefined 和 Symbol(es6 新增)引用类型(堆 heap):Object Array Function Data数据结构数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成算法算法特征有穷性、确定性、可行性、输入、输出算法设计衡量正确性、可读性、健壮性, 时间复杂度, 空间复杂度时间复杂度运行一段程序的计算工作量,时间复杂度即通常所说的算法执行所需要耗费的时间,时间越短,算法越好。但是,一个算法的执行时间往往无法精确估计。通常需要在实际的计算机运行才知道具体的执行时间。但是,也可以大致进行估计,得到算法的时间复杂度。算法的执行时间往往和算法代码中语句执行的数量有关。时间复杂度运行一段程序的内存占用,空间复杂度通常指的是算法程序在计算机只想中只想所需要的存储空间。eg:O(1):常数运算O(n):1 层循环O(n^2):2 层循环O(n^n):n 层循环O(log2n):int i = 1, n = 100;while(i < n){ i = i * 2;}算法分类快速排序算法深度优先算法广度优先算法堆排序算法归并排序算法冒泡排序原理:每次把最大或者最小的浮到最顶层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)不稳定简单参考前端你应该了解的数据结构与算法如何理解时间复杂度和空间复杂度 3. 时间复杂度和空间复杂度