Array Methods

数组的基础方法

  • push: 向数组末尾添加一个或多个元素,并返回新数组的长度

  • pop: 删除数组的最后一个元素,并返回该元素

  • unshift: 向数组开头添加一个或多个元素,并返回新数组的长度

  • shift: 删除数组的第一个元素,并返回该元素

  • slice: 返回一个数组的切片副本,不改变原数组

  • splice(start, count, ...newElements): 删除数组中的一段,并用一个或多个值替换它们

    • start: 要删除元素的开始位置,这个元素也要被删除

    • count: 删除元素的个数

    • newElements: 用于替换删除元素的新元素,可以试一个或者多个

    • 这个方法的返回值是删除的元素组成的数组,原数组会被改变。

const arr = [1, 2, 3, 4, 5]
const deleteElements = arr.splice(5, 0, 6)
console.log({deleteElements, arr})
// deleteElements: []
// arr: [1, 2, 3, 4, 5, 6]

数组方法的时间复杂度

数组方法 时间复杂度
pop O(1)
push O(1)
slice O(1)
shift O(n)
unshift O(n)
map O(n)
splice O(n)
find O(n)
concat O(n)
sort O(nlogn)

splice && slice

  • splice 直接操作原数组, 返回切掉的数组,时间复杂度:O(n)

  • slice 不改变原数组,返回切片新数组,时间复杂度:O(1)

sort 原理

十大经典排序算法(动图演示) :https://www.cnblogs.com/onepixel/p/7674659.html

初级排序(O(n2))

选择排序:每次找最小值,然后放到待排序数组的起始位置。

const selectSort = arr => {
  const len = arr.length
  let minIndex
  for (let i = 0; i < len - 1; i++) {
    minIndex = i
    for (let j = i + 1; j < len; j++) {
      if (arr[j] < arr[minIndex]) {
        minIndex = j
      }
    }
    [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]]
  }
}

插入排序:从前往后逐步构建有序序列。对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

冒泡排序:嵌套循环,每次查看相连元素如果逆序,则交换位置。

高级排序(O(nlogn))

快速排序:。

归并排序:。

堆排序:数组元素依次建立小顶堆,然后依次取堆顶元素并删除。

特殊排序(O(n+K))

计数排序:。

桶排序:。

基数排序:。

Copyright © tomgou 2022 all right reserved,powered by Gitbook该文章修订时间: 2022-07-22 21:30:21

results matching ""

    No results matching ""