数据结构之索引查找(分块查找)

这篇具有很好参考价值的文章主要介绍了数据结构之索引查找(分块查找)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

活动地址:CSDN21天学习挑战赛

  作者简介:大家好我是小唐同学(๑>؂<๑),为梦想而奋斗的小唐,让我们一起加油!!!

索引查找分块查找,数据结构,算法,数据结构

个人主页:小唐同学(๑>؂<๑)的博客主页

系列专栏:数据结构

博友们如果也是新手入门数据结构我希望大家可以多加练习 数据结构题库在牛客网就有已经给大家附上链接,可以直接点击跳转:刷题点这里

牛客网支持ACM模式哦,刷算法题也很推荐哦!!!

下面上文章------》

索引查找分块查找,数据结构,算法,数据结构

 

目录

刷题图示:

索引查找介绍:

 索引查找的核心思想:

索引查找代码实现:

复杂度:

         时间复杂度:


刷题图示:

 索引查找分块查找,数据结构,算法,数据结构

索引查找介绍:

索引查找也称为分块查找,也是顺序查找的一种改进方法,在索引查找法中,除表本身之外还需要建立一个索引表。由分块查找可知,它要分开进行,块内元素之间无大小关系,块与块之间有大小关系(比如说:第二块中的元素肯定要比第一块中大,第三块中元素肯定要比前两块中的元素大)所以索引表是有序的,可以进行二分查找进行查找由于要有索引所以要用到结构体。

 索引查找的核心思想:

准备工作:

本文索引查找是在一定条件下使用(给索引表开值为3,所以查找表中元素个数要是3的倍数),则每个块中的元素个数为n/3,则在每个块中找出块中最大值,赋值给索引表,在对索引表的关键字进行比较排序

索引查找是先找到确定的块(这个过程可以进行二分也可以进行顺序查找(下边代码实现的是顺序查找))

确定块之后在块中进行顺序查找

索引查找代码实现:

# include <stdio.h>
# include <stdlib.h>
struct Lnode
{
	int start;
	int key;
}index_table[3];
int cmp(const void *a,const void *b)
{
	return (*(struct Lnode*)a).key> (*(struct Lnode*)b).key?1:-1;
}
int fenkuai(int key,int a[],int n)//传参  给出关键字和数组  n是来确定块的大小 
{
	int i,j;
	i=0;
	while(i<3&&key>index_table[i].key)
	{
		i++;
	 } 
	 if (i>3)
	 {
	 	return 0; 
	 } 
	  j=index_table[i].start;
	   for(j=index_table[i].start;j<index_table[i].start+n/3;j++)
	   {
	   if(a[j]==key)
	   {
	   	return j;
	   }
	   }
	   return 0;
}
int main()
{
	 int i,j=0,k;
   int n;
   printf("请输入3的倍数的个数") 
   scanf("%d",&n);
    int a[n];
   for(i=0;i<n;i++)
{
scanf("%d",&a[i]);   	
} 
    int key;
    printf("请输入要查找的值"); 
    scanf("%d",&key);
    for(i=0;i<3;i++)
    {
    	index_table[i].start=j;
    	j+=n/3;
   	 	for(int k=index_table[i].start;k<=j;k++)
   	 	{
   	 	if(index_table[i].key<a[k])
			{
			index_table[i].key=a[k];	
			}	
		}
	
	}
	qsort(index_table,3,sizeof(index_table[0]),cmp);
//	printf("请输入你想查找的数");
	k= fenkuai(key,a,n);
	if(k>0)
	{
		printf("查找成功下标为: %d ",k);
	}
	else
	printf("失败"); 
	return 0; 
}

复杂度:

         时间复杂度:

                   查找索引表时采用顺序查找:

ASL=L1+LS=(b+1)/2+(s+1)/2=(s^2+2*s+n)/2*s

                对索引表进行折半查找时:

ASL=L1+LS=⌈log2(b+1)⌉+(s+1)/2文章来源地址https://www.toymoban.com/news/detail-786230.html

到了这里,关于数据结构之索引查找(分块查找)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构算法--1 顺序查找二分查找

    顺序查找时间复杂度为O(n) 我们可以借助Python中的函数enumerate,通过enumerate遍历列表返回其索引和值 也可以通过列表长度依次遍历: 但是二分查找时间复杂度为O(logn):

    2024年02月12日
    浏览(41)
  • 数据结构--》掌握数据结构中的查找算法

            当你需要从大量数据中查找某个元素时,查找算法就变得非常重要。         无论你是初学者还是进阶者,本文将为你提供简单易懂、实用可行的知识点,帮助你更好地掌握查找在数据结构和算法中的重要性,进而提升算法解题的能力。接下来让我们开启数据

    2024年02月08日
    浏览(44)
  • 【数据结构(七)】查找算法

    在 java 中,我们常用的查找有四种:     ① 顺序(线性)查找     ② 二分查找/折半查找     ③ 插值查找     ④ 斐波那契查找 问题:     数组arr[] = {1, 9, 11, -1, 34, 89},使用线性查找方式,找出11所在的位置。 代码实现: 运行结果: 问题:     请

    2024年02月04日
    浏览(35)
  • 数据结构--6.3查找算法(静态、动态)(插值查找)

    静态查找:数据集合稳定,不需要添加,删除元素的查找操作。 动态查找:数据集合在查找的过程中需要同时添加或删除元素的查找操作。 对于静态查找来说,我们不妨可以用线性表结构组织数据,这样可以使用顺序查找算法,如果我们在对进行排序,则可以使用折

    2024年02月09日
    浏览(31)
  • 数据结构与算法:树形查找

    左子树结点值 根结点值 右子树结点值 对二叉排序树进行中序遍历,可以得到一个递增的有序数列 原理: 对于一个给定的二叉排序树,如果要查找一个节点,可以按照以下步骤进行: 从根节点开始比较。 如果要查找的值等于当前节点的值,则找到了目标节点,返回该节点。

    2024年02月06日
    浏览(31)
  • 数据结构与算法之查找: 顺序查找 (Javascript版)

    顺序查找 思路 遍历数组 找到跟目标值相等元素,就返回它的下标 没有找到,返回-1 算法实现 总结 非常低效,算是入门搜索 时间复杂度:O(n) 对于数组结构或链表结构而言,没什么太多可说的

    2024年02月05日
    浏览(39)
  • 【数据结构与算法】查找(Search)【详解】

    【知识框架】 查找(Searching) :就是根据给定的某个值,在查找表中确定一个其等于给定值的数据元素( 或记录)。 查找表(Search Table) :是由同一类型的数据元素(或记录)构成的集合。 (Key):数据元素中唯一标识该元素的某个数据项的值,使用基于的查找,查

    2024年02月02日
    浏览(39)
  • 数据结构和算法之二分法查找

    二分法查找,也称作 二分查找 或 折半查找 ,是一种在有序数组中快速查找特定元素的算法。它采用分治法思想,通过将问题划分为规模更小的子问题,并且通过对子问题的查找来解决原问题。 二分法查找的思路是不断地将数组一分为二,然后判断目标值在哪一部分,进而

    2024年02月09日
    浏览(34)
  • 数据结构实验报告(四)——查找和排序算法

    1. 掌握顺序查找技术和拆半查找技术以及部分排序算法的设计思想; 2. 掌握查找、部分排序算法的实现与执行过程。 查找算法 1.顺序查找: 从数组第一个元素开始逐个比较,找到后返回相应下标。 2.折半查找: 从数组中间开始比较,如果需查找值比中间值大,则在中间值右

    2024年02月07日
    浏览(30)
  • 【数据结构与算法】python实现二分查找

    二分查找 又称折半查找,它是一种效率较高的查找方法 原理:首先,假设表中元素是按升序排列,将表中间位置记录的与查找比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的大于查找,则

    2024年02月05日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包