欢迎!点击下方按钮体验数组操作

JavaScript 实现

// 数组的创建
const arr = [10, 20, 30, 40, 50];

// 随机访问 - O(1)
arr[2]; // 30

// 末尾插入 - O(1) 均摊
arr.push(60);

// 末尾删除 - O(1)
arr.pop();

// 头部插入 - O(n) 需要移动所有元素
arr.unshift(5);

// 头部删除 - O(n)
arr.shift();

// 指定位置插入 - O(n)
arr.splice(2, 0, 25);

// 指定位置删除 - O(n)
arr.splice(2, 1);

// 线性搜索 - O(n)
arr.indexOf(30);

// 二分搜索(需排序)- O(log n)
function binarySearch(arr, target) {
    let left = 0, right = arr.length - 1;
    while (left <= right) {
        const mid = Math.floor((left + right) / 2);
        if (arr[mid] === target) return mid;
        if (arr[mid] < target) left = mid + 1;
        else right = mid - 1;
    }
    return -1;
}

时间复杂度分析

操作时间复杂度说明
随机访问O(1)通过索引直接计算内存地址
末尾插入O(1)均摊复杂度,需要扩容时为O(n)
末尾删除O(1)直接减小长度
头部插入O(n)需要移动所有元素
头部删除O(n)需要移动所有元素
指定位置插入/删除O(n)平均移动 n/2 个元素
线性搜索O(n)逐个比较
二分搜索O(log n)需要数组已排序