Ⅰ )算法思想:
在表的一端设置一个称为“监视哨”的附加单元,存放要查找元素的关键字,从表的另一端开始查找,如果在“监视哨”找到要查找元素的关键字,返回失败信息,否则,返回相应下标。
Ⅱ)性能分析:
假设列表长度为n,那么查找到第i 个元素时,需要进行n-i+1次比较。
ASL = 1/n∑(n-i+1) = (n+1)/2
Ⅲ)源代码:
#include<stdio.h> #define MaxSize 20 //线性表长度 typedef struct { int key; }RecordType; typedef struct { int length; RecordType r[MaxSize + 1]; }RecordList; int SeqSearch(RecordList l, int key) { int i; l.r[0].key = key; //将要查找的值赋给监视哨 i = l.length; while (l.r[i].key != key) { i--; } return i; //当l.r[i].key == key时返回下标 } int main() { RecordList L = { 6, 0, 12, 15, 20, 25, 45, 50 }; printf("%d\n", SeqSearch(L, 20)); //输出元素20所在的下标 return 0; }
本文介绍了一种改进的线性搜索算法——监视哨搜索,通过在数组末尾添加待查找项作为监视哨来简化搜索过程。该算法适用于未排序的数组,并分析了其平均时间复杂度为O(n)。
609

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



