05浅谈几种检索算法——顺序检索、二分查找、桶检索、二叉查找树

本文深入讲解了四种检索算法:顺序检索、二分查找、桶检索和二叉查找树检索。对比了它们的时间复杂度,详细解析了每种算法的设计思路与应用场景,帮助读者理解并掌握高效检索方法。

05基于顺序、二分、桶、二叉查找树的检索算法

一、问题

在一个有序数组arr[1…n]中查找x,如果x在数组arr[]中,输出x的下标 j ;如果x不在arr[]中,输出 j = 0.(为避免数值含义重合,我们假定数组下标由1开始)

如何以行之有效的方法检索出目标值x呢?

二、几种检索算法

1.顺序检索

1.1解析

顺序检索是最容易想到、也是最简单的检索方式。

顺序检索的核心思想:

按顺序逐一判断数组中的数据是否符合要求,若符合,返回下标索引;反之,继续判断下一个。若遍历结束,没找到目标x,返回0.

1.2设计
//顺序检索
int linearSearch(int arr[], int n, int x) {
   
   
	for ( i from 0 to n-1 )
		if (arr[i] == x)
			return i+1;//输出下标从1开始
	return 0;
}
1.3分析

不难得出,顺序检索复杂度最好情形为linearSearch()=O(1),最坏情形为linearSearch()=O(n).

我们知道,顺序检索适用范围广,无论数组是否有序,无论数据类型是整型还是浮点型,它都可以胜任。

但是,当n很大的时候,顺序检索的效率明显很低,是否有更好的检索方式呢?

2.二分查找检索

2.1解析

二分查找也称折半查找,它不同于顺序检索挨家挨户地做人口普查,每次判断后,它会有选择地筛选掉剩余一半的数据。

二分查找的基本思想:

1)
将n个元素分成大致相等的两部分,在升序数组中取arr[n/2]与x做比较。(降序数组类似)
2)
如果x=arr[n/2],则找到x,返回下标索引,算法中止;
如果x<arr[n/2],则在数组arr[]的左半部分继续搜索x;
如果x>arr[n/2],则在数组arr[]的右半部搜索x.
3)
当左部分与右部分重合依旧没有找到x,函数返回0.

2.2设计

//二分查找
int 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值