算法与数据结构

更好更快地运算 - 信息表示和如何处理

数组 (Array) - 连续内存

元素在内存中连续存储,通过索引快速访问

0
1
2
3
4
5
6
7
O(1) 随机访问
O(1) 尾部插入/删除
O(n) 中间插入/删除
链表 (Linked List) - 离散内存

元素通过指针链接,插入删除灵活但访问较慢

O(n) 随机访问
O(1) 已知位置插入/删除
动态 内存分配
数组 vs 链表 操作对比
操作 数组 链表
按索引访问 O(1) - 直接计算地址 O(n) - 需要遍历
头部插入 O(n) - 需要移动所有元素 O(1) - 只需改指针
内存连续 是 - 缓存友好 否 - 跳跃访问
扩容 需要重新分配 动态分配
搜索动画演示

在数据结构中查找元素的过程

数组二分查找

O(log n) 快速

每次比较中间值,排除一半数据

链表顺序查找

O(n) 较慢

从头开始逐个遍历节点

排序算法复杂度
算法 平均时间 最坏时间 空间 特点
快速排序 O(n log n) O(n²) O(log n) 分治法,实际最快
归并排序 O(n log n) O(n log n) O(n) 稳定,需要额外空间
堆排序 O(n log n) O(n log n) O(1) 原地排序
冒泡排序 O(n²) O(n²) O(1) 简单,但效率低