一 排序
SN | 排序方式 | 时间复杂度 | 空间复杂度 | 稳定性 | 算法描述 | ||
AVG | 最好 | 最坏 | |||||
1 | 直接插入 | O(n2) | O(n) | O(n2) | O(1) | 稳定 | 按KEY大小插入到有序队列 |
2 | 希尔插入 |
|
|
| O(1) | 不稳定 | 缩小增量排序 |
3 | 折半插入 |
|
|
|
| 稳定 |
|
4 | 冒泡排序 | O(n2) | O(n) | O(n2) | O(1) | 稳定 | 属交换排序,从右到左,相邻记录比较 |
5 | 快速排序 | O(nlog2n) | O(nlog2n) | O(n2) | O(log2n)~O(n) | 不稳定 | 两端向中间比较 |
6 | 直接选择 | O(n2) |
|
|
| 不稳定 |
|
7 | 堆排序 | O(nlog2n) |
| O(nlog2n) | O(1) | 不稳定 | 树形选择排序 |
8 | 归并排序 | O(nlog2n) |
|
| O(n) | 稳定 |
|
9 | 基数排序 |
|
|
| O(n) | 不稳定 |
|
备注:
u 1,2,3属于插入排序; 4,5属于交换排序; 6,7属于选择排序.
u 记录数大时,选择改进算法; 记录数较小时,可采用简单排序(如1,4,6)
u 平均情况下,快速排序速度是最快的,推荐使用.
u 稳定性指具有相同值的记录在排序时相对次序不改变.
u 内排序: 数据量较少时,仅在内存中进行;
u 外排序: 数据量较大时,在内外存中进行数据交换(常用归并排序,文件来解决)
二 查询
检索表: 检索所依赖的数据结构.
查询定义: 根据KEY,在检索表中确定VALUE的值.
1 线性表
1)顺序检索: 采用逆向检索
2)折半检索
3)分块检索
2 树表
1)二叉排序树
2)平衡的二叉排序树
3)B树
4)红黑树
3 HASH表
最快只需常数时间.
4 其它数据结构
1)序列容器
Vector: 类似线性表
List 类似线性表
2)关联容器
Map: 图的检索, 一对一
Multimap: 一对多
Hashmap: 常数时间检索,用hash_table实现.
检索算法评估: (平均检索长度ASL)
下面是检索算法效率列表:
检索表 | 检索算法 | ASL | 算法描述 |
线性表 | 顺序 | (n+1)/2 |
|
折半 | Log2(n+1)-1 (n>>100) | 适用于有序表 | |
分块 |
|
| |
树表 | 二叉排序树 |
|
|
平衡二叉排序树 |
|
| |
B树 |
|
| |
红黑树 |
|
| |
HASH表 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|