前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

查找

作者头像
废江_小江
发布2022-09-05 12:48:16
5450
发布2022-09-05 12:48:16
举报
文章被收录于专栏:总栏目

查找的概念没什么好说的,但值得提的是查找分为内外查找。 查找分为三大类:线性表查找,树形查找,散列查找(又叫哈希表)

线性表查找

线性表查找主要有顺序查找,时间复杂度为o(n2),主要掌握折半查找(又叫二分),时间复杂度为nlog(n),因为之前学过二分查找,在算法思想,分而治之思想中,正好学到了,这里不重复学习,最后有索引结构的分块查找,下面贴出代码。

代码语言:javascript
复制
//分块查找算法
#include <stdio.h>
#define MAXI 20			//索引表的最大长度
#define MAXL 100		//最大长度
typedef int KeyType;	//定义关键字类型为int
typedef char InfoType;
 
typedef struct
{	KeyType key;		//关键字项
	InfoType data;		//其他数据项,类型为InfoType
} RecType;				//查找元素的类型
 
typedef struct 
{
	KeyType key;	//KeyType为关键字的类型
	int link;		//指向对应块的起始下标
} IdxType;			//索引表元素类型
//顺序表算法 
void CreateList(RecType R[],KeyType keys[],int n)	//创建顺序表
{
	for (int i=0;i<n;i++)
		R[i].key=keys[i];
}
void DispList(RecType R[],int n)	//输出顺序表
{
	for (int i=0;i<n;i++)
		printf("%d ",R[i].key);
	printf("\n");
}
int IdxSearch(IdxType I[],int b,RecType R[],int n,KeyType k) //分块查找
{	
	int s=(n+b-1)/b;			//s为每块的元素个数,应为n/b的向上取整
	int low=0,high=b-1,mid,i;
	while (low<=high)			//在索引表中进行折半查找,找到的位置为high+1
	{	mid=(low+high)/2;
		if (I[mid].key>=k)
			high=mid-1;
		else 
			low=mid+1;
	}
	//应在索引表的high+1块中,再在主数据表中进行顺序查找
	i=I[high+1].link;
	while (i<=I[high+1].link+s-1 && R[i].key!=k)
		i++;
	if (i<=I[high+1].link+s-1)
		return i+1;			//查找成功,返回该元素的逻辑序号
	else
		return 0;			//查找失败,返回0
}
 
 
int main()
{
	int n=25,b=5,j;
	RecType R[MAXL];
	IdxType I[MAXI]={{14,0},{34,5},{66,10},{85,15},{100,20}};
	KeyType a[]={8,14,6,9,10,22,34,18,19,31,40,38,54,66,46,71,78,68,80,85,100,94,88,96,87};
	KeyType k=85;
	CreateList(R,a,n);
	printf("查找表:"); DispList(R,n);
	j=IdxSearch(I,b,R,n,k);
	if (j!=-1)
		printf("R[%d]=%d\n",j,k);
	else
		printf("未找到%d\n",k);
	return 1;
}

树形结构查找

树形结构查找主要是分为内查找和外查找,内查找为二叉排序树(又叫搜索二叉树),同时也是动态查找(指在查找时,除了找到指定数,还能够对指定数进行删除等操作)但由于如果随机删除多次,会导致二叉排序树歪向一边,此时查找效率下降,于是有了平衡二叉树(又叫AVL树)。此外,外查找有b+和b-树。关于学习,因为之前学的树中学到了二叉搜索树和平衡二叉树,不重复学习;b树太麻烦,以后学了再在这做笔记

散列查找

废江博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 转载请注明原文链接:查找

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-12-02),如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 线性表查找
  • 树形结构查找
  • 散列查找
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档