返回目录:
Chilan Yu:《数据结构》目录链接zhuanlan.zhihu.com具有顺序查找法、折半查找法和分块查找法三种
8.2.1 顺序查找法
顺序查找法的特点是:用所给关键字与线性表中各元素的关键字逐个比较,直到成功或失败。
存储结构通常为顺序结构或者链式结构。
【算法思想】
在表的一端设置一个称为“监视哨”的附加单元,存放要查找元素的关键字。从表的另一端开始查找,如果在“监视哨”找到要查找元素的关键字,返回失败信息,否则返回相应下标。
【算法分析】
用平均查找长度分析顺序查找算法的性能。
假设列表长度为n,那么查找第i个数据元素时需进行n-i+1次比较,即Ci=n-i+1。又假设查找每个数据元素的概率相等,即Pi=1/n,则顺序查找算法的平均查找长度为:
#include <iostream>
using namespace std;
#define LIST_SIZE 50//顺序表最大长度
int RecordList[LIST_SIZE];//存储顺序表的数组
int len;//定义待查找顺序表的长度
int key;//定义待查找的元素
/*在顺序表RecordList中查找其关键字等于key的元素,若找到,则函数值为该元素在表中的位置,否则为0*/
int SeqSearch(){//设置监视哨的顺序查找法
RecordList[0] = key;//设置监视哨
int i = len;
while(RecordList[i]!=key) i--;
return i;
}
int SeqSearch(){//不设置监视哨的顺序查找法
int i = len;
while(i>=1 && RecordList[i]!=key) i--;
if(i>=1) return i;
else return 0;
}
int main()
{
cout << "输入待查找顺序表的长度:";
cin >> len;//输入长度
cout << "依次输入顺序表元素(整型):";
for(int i=1;i<=len;++i){//输入顺序表
cin >> RecordList[i];
}
cout << "输入待查找的元素:";
cin >> key;
cout << endl << "待查找元素在顺序表中的位置:";
cout << SeqSearch() << endl;
return 0;
}