一 排序
|
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表 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
本文详细介绍了多种排序算法(如直接插入、希尔插入等)的时间复杂度、空间复杂度及稳定性,并对比了不同算法的特点与适用场景。同时,还探讨了几种检索算法,包括线性表的顺序检索、折半检索等,以及树表、HASH表的检索效率。

860

被折叠的 条评论
为什么被折叠?



