算法1:采用顺序存储结构创建静态查找表,对查找表进行顺序查找和改进的顺序查找,并对其查找效率进行比较;
时间: 2024-05-12 16:13:52 浏览: 116
1. 顺序存储结构创建静态查找表
顺序存储结构是将数据元素按其逻辑顺序依次存储在一组连续的存储单元中,用于创建静态查找表的方法是将数据元素按关键字的大小顺序排列,并存储在一维数组中,数组的下标表示数据元素的序号,如下所示:
```c
typedef struct {
KeyType key; // 关键字类型
InfoType info; // 数据类型
} ElemType;
typedef struct {
ElemType elem[MAXSIZE]; // 静态数组
int length; // 长度
} SSTable;
```
2. 顺序查找
顺序查找就是从查找表的第一个数据元素开始,逐个比较其关键字和待查找关键字是否相等,直到找到或查找结束。其时间复杂度为O(n),其中n为查找表的长度。
```c
int SeqSearch(SSTable ST, KeyType key) {
int i;
for (i = 0; i < ST.length; i++) {
if (EQ(key, ST.elem[i].key)) {
return i;
}
}
return -1;
}
```
3. 改进的顺序查找
改进的顺序查找是在顺序查找的基础上,将经常查找的数据元素移到靠近查找起点的位置,以提高查找效率。具体实现方法是,每次查找到数据元素后,将其与前一个数据元素交换位置,直到找到待查找数据元素或查找结束。
```c
int SeqSearch2(SSTable ST, KeyType key) {
int i;
for (i = 0; i < ST.length; i++) {
if (EQ(key, ST.elem[i].key)) {
if (i > 0) {
ElemType temp = ST.elem[i];
ST.elem[i] = ST.elem[i - 1];
ST.elem[i - 1] = temp;
}
return i - 1;
}
}
return -1;
}
```
4. 比较查找效率
为了比较顺序查找和改进的顺序查找的效率,可以通过比较它们的平均查找次数来衡量。平均查找次数的计算公式为:
$$ASL=\frac{\sum_{i=1}^{n}f(i)}{n}$$
其中,$f(i)$表示查找第$i$个数据元素的查找次数,$n$表示查找表的长度。
对于顺序查找,其平均查找次数为:
$$ASL_1=\frac{\sum_{i=1}^{n}\frac{i+1}{2}}{n}=\frac{\frac{1}{2}n(n+1)}{n}=\frac{n+1}{2}$$
对于改进的顺序查找,其平均查找次数为:
$$ASL_2=\frac{\sum_{i=1}^{n}\frac{i+1}{2}}{n}=\frac{\frac{1}{2}n(n+3)}{n+1}=\frac{n+3}{2}-\frac{1}{2(n+1)}$$
通过计算可以得出,改进的顺序查找的平均查找次数比顺序查找少,因此改进的顺序查找效率更高。
阅读全文