设置“哨兵”,哨兵就是待查值,将它放在查找方向的“尽头”处,免去了在查找过程中每一次比较后都要判断查找位置是否越界,从而提高查找速度。
顺序查找伪代码描述如下:
1、设置哨兵;
2、初始化查找的起始下标i=n;
3、若r[i]与k相等,则返回当前i的值;否则,继续比较前一个记录;
c++实现如下:
#include <iostream>
using namespace std;
const int MaxSize = 20;
class SeqList
{
public:
SeqList(int a[], int k);//建立一个长度为k的顺序表
int SeqSearch(int k);//顺序查找函数
private:
int data[MaxSize];
int length;
};
SeqList::SeqList(int a[], int k)
{
while (k < MaxSize)
{
for (int i = 0; i < k; i++)
data[i] = a[i];
length = k;//length对应数组下标高端存放哨兵的位置
break;
}
}
int SeqList::SeqSearch(int k)
{
data[length] = k;//在数组下标高端设置哨兵
int i = 0;
while (data[i] != k)
i++;
return i;
}
int main()
{
int b[] = { 7,14,18,21,23,29,31,35,38,42,46,49,52 }, n(13), k, t;
SeqList Seq(b, n);
cout << "输入查找值k:"; cin >> k;
t = Seq.SeqSearch(k);
if (t < n)cout << k << "对应的下标为:" << t << endl;
else cout << k << "不在该序列之中" << endl;
return 0;
}