顺序查找算法

简介

  顺序查找算法比较简单,在一个线性表中,按照从前往后或者从后往前的顺序依次查找,如果查找到关键字和给定值相等,则返回给定值的位置,查找成功;如果查找值最后一个元素仍未找到,则查找失败。
  有一种改进的算法,引入了哨兵的思想,所谓哨兵就是将关键字用一个数组位置去存储,保证在循环的过程中不必判断数组是否越界,因为执行到最后一个元素时,一定会跳出循环。在一定程度上优化了普通查找算法。

// 顺序查找

#include <stdio.h>

int SequentialSearch(int data[],int length, int key);
int SequentialSearchSentry(int data[], int length, int key);

int main(){
	
	int data_sequential[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 
	int data_sequential_sentry[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
	
	printf("%d \n",SequentialSearch(data_sequential, 10, 10));
	printf("%d \n",SequentialSearchSentry(data_sequential_sentry, 11, -2));
	return 0;
} 


//顺序查找的一般形式 
//在 data 顺序表中查找到元素 key,返回下标(从 1 开始) 
//返回 0 则查找失败 
int SequentialSearch(int data[],int length, int key){
	
	int i  = 0;
	
	for(i = 0; i < length; ++i){
		if(key == data[i]){
			return i + 1;
		}
	} 
	
	return 0;	//查找失败 
}



//有哨兵的顺序查找 
//data[0] 是哨兵元素 
//在 data 顺序表中查找到元素 key,返回下标(从 1 开始) 
//下标从有效数据元素开始计算,即第一个数组元素 data[0] 不参与计算 
//返回 0 则查找失败
//length:整个数组的长度,不是有效的数据元素长度 
int SequentialSearchSentry(int data[], int length, int key){

	int i = length - 1;		//从尾部向前查找 
	
	data[0] =  key;
	
	while(key != data[i]){
		--i;
	} 
	
	return i;	//返回查找的结果 
}

  顺序查找算法整个思路和实现过程都比较简单,理解思路和哨兵思想即可。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值