顺序查找法的思路:用所给关键字与线性表中各元素的关键字逐个比较,直到成功或失败。
顺序查找法的时间复杂度为O(n)
顺序查找法——无哨兵
#include<iostream>
using namespace std;
int main()
{
int num; //列表中数据元素的个数
cout<<"请输入列表中数据元素的个数"<<endl;
cin>>num;
int arr[num]; //采用数组结构
//对数组进行初始化
cout<<"开始对数组进行初始化,请输入"<<num<<"个元素"<<endl;
for(int i=0;i<num;i++)
{
cin>>arr[i];
}
int key;
cout<<"请输入要查找元素的值"<<endl;
cin>>key;
int result=0;
for(int i=0;i<num;i++)
{
if(key==arr[i])
{
result=i+1;
}
}
if(result==0)
{
cout<<"要查找的数据元素不存在"<<endl;
}
else
{
cout<<"要查找的数据元素位于第"<<result<<"个"<<endl;
}
return 0;
}
测试结果:
顺序查找法——有哨兵
#include<iostream>
using namespace std;
int main()
{
int num; //列表中数据元素的个数
cout<<"请输入列表中数据元素的个数"<<endl;
cin>>num;
int arr[num+1]; //采用数组结构
//对数组进行初始化
cout<<"开始对数组进行初始化,请输入"<<num<<"个元素"<<endl;
for(int i=1;i<num+1;i++)
{
cin>>arr[i];
}
int key;
cout<<"请输入要查找元素的值"<<endl;
cin>>key;
arr[0]=key; //设置哨兵
int result=num;
while(key!=arr[result]) //少了一个判断是否越界的条件
{
result--;
}
if(result==0)
{
cout<<"要查找的数据元素不存在"<<endl;
}
else
{
cout<<"要查找的数据元素位于第"<<result<<"个"<<endl;
}
return 0;
}
测试结果:
总结: 顺序查找法是一个十分重要的算法,虽然很简单,但是我们更要专注于效率问题。当使用哨兵式,相对于没使用哨兵少了一个判断条件,这时速度就快了一半,大家一定要记住这个地方。