C语言:数据结构之查找--顺序查找

2 篇文章 0 订阅

概念:

    查找就是根据给定的某个值,在查找表中确定一个关键字等于给定值的数据元素。

主要查找算法:

  1. 顺序表查找:顺序表查找属于无序查找,从第一个关键字开始,逐个关键字进行比较,查找给定关键字;
  2. 二分查找:又称折半查找,属于有序查找,在进行查找之前需要对查找表进行排序,使查找表有序,这样能方便快速查找;
  3. 插值查找:是对二分查找的优化,通过将数据内容与中值关系进行联系,加快查找速度;
  4. Fibonacci查找:也是一种有序查找,利用换黄金分割原理实现,实质就是调整中值;
  5. 线性索引查找:将索引项集合组织为线性结构;
  6. 散列查找:通过散列函数直接获取存储位置;

下面按照上面的描述顺序依次介绍各个查找的C或C++实现,以及相关优化:

顺序表查找:

通过暴力循环逐项比较该项与关键字,时间复杂度o(n);

顺序查找的实现如下:

/*这个循环中每次循环都要判断i是否越界,针对这个情况可以提出优化*/
int search::sequentialSearch(int* a, int n, int key)
{
	int i;
	for (size_t i = 0; i < n; i++)
	{
		if (a[i]==key)
		{
			return i;
		}
	}
	return -1;
}

上面的算法其实不够完美,在for循环中每次都是需要比较i和n的值;下面提出改进版:

int search::sequentialSearch2(int* a, int n, int key)
{
	if (a[0]==key)
	{
		return 0;
	}
	a[0] = key;
	int i = n - 1;
	while (a[i]!=key)
	{
		i--;
	}
	return i == 0 ? -1 : i;
	
}

在上面这个版本中减少了i和n的比较次数;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值