七大查找算法

本文总结了七大查找算法:顺序查找、二分查找、插值查找、斐波那契查找、树表查找、分块查找和哈希查找。详细介绍了它们的基本思想、适用场景及时间复杂度分析。对于有序数据,二分查找、插值查找和斐波那契查找具有较高的效率,而哈希查找则提供快速定位。
摘要由CSDN通过智能技术生成

本本章是https://www.cnblogs.com/maybe2030/p/4715035.html#top 和第四版算法的总结。

1. 顺序查找

说明:适用于储蓄结构为顺序存储或链接存储的线性表。
基本思想:从数据端的开头依次扫描,若扫描到关键字与给定值K相等,则成功,若扫描结束还没找到,则失败。

时间复杂度分析:
平均长度为:ASL=1/n(1+2…+n)=(n+1)/2, O(n);
当查找不成功的时候,复杂度为n+1,O(n);
所以时间复杂度为O(n);

public class SequentialSearch
{
   	public static void search(Comparable[] a,int key)
	{
   
		int N = a.length;
		for(int i=0; i<N; i++)
		{
   	if(a[i]==key)
				return i;
		}
		return -1;
	}
	
}

2. 二分查找

说明:元素必须有序,若无序需要先进行排序操作。
基本思想:

  1. 将数据a排序, 排序后将查找值key与中间节点a[mid]比较;
  2. 若相等,返回mid索引;若a[mid]<key, 更新右边界索引high=mid-1;若a[mid]>key, 更新左边界索引为low=mid+1;
  3. 一直循环step2,终止条件为找到key或者low<=high;

时间复杂度分析:
最坏的情况下:查找的次数为log2(n)+1,所以期望值为O(logn)

// 递归版本
public class BinarySearch
{
   
	public static void BS(Comparable[] a,int key,int low,int high)
	{
   	
		int mid = low+(high-low)/2;
		if (a[mid]== key)
			return mid;
		if (a[mid]>key)
			return BS(a,key,low,mid-1);
		if (a[mid]<key
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值