各种排序查询的算法效率比较

排序

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(算法与数据结构)