8.2.1 顺序查找法

顺序查找法的思路:用所给关键字与线性表中各元素的关键字逐个比较,直到成功或失败。

顺序查找法的时间复杂度为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;
} 

测试结果: 

 


总结: 顺序查找法是一个十分重要的算法,虽然很简单,但是我们更要专注于效率问题。当使用哨兵式,相对于没使用哨兵少了一个判断条件,这时速度就快了一半,大家一定要记住这个地方。

猜你喜欢

转载自blog.csdn.net/weixin_42617472/article/details/85075898