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

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

被折叠的 条评论
为什么被折叠?



