顺序表查找以及优化
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
bool search1(int *a, int n, int key)
{
for (int i = 0; i <= n; i++)
{
if (a[i] == key)
return true;
}
return false;
}
//优化的方法是设置一个哨兵 可以解决不需要每次让i与n作比较
//这种在查找方向的尽头放置哨兵 免去了在查找过程中每一次比
//较后都要判断查找位置是否越界的小技巧
bool search2(int *a, int n, int key)
{
a[0] = key; //设置a[0]为关键字值,称之为哨兵
int i = n; //循环从数组尾部开始
while (a[i] != key)
i--;
if (0 == i)
return false;
else
return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[] = { 0,1,2,3,4,5,6,7 };
//找的数不能是0,0只是一个将被赋值为哨兵的值
if (search2(a, sizeof(a) / sizeof(a[0]), 2))
cout << "找到了" << endl;
else
cout << "没找到" << endl;
return 0;
}