🔢 数组 Array 可视化
数组是最基础的数据结构,使用连续内存空间存储元素,支持 O(1) 随机访问
欢迎!点击下方按钮体验数组操作
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) | 需要数组已排序 |