首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

查找算法折半查找

本篇文章将介绍折半查找算法。 文章目录 何为折半查找算法实现 递归实现 效率分析 何为折半查找?...上一篇文章介绍了顺序查找算法,我们知道,虽然顺序查找算法适用性高,但效率太低,那么能不能在此基础上继续提高算法的效率呢?...这个时候,折半查找诞生了,它的原理是每次都将待查找的记录所在的区间缩小一半,比如: 若要在该序列中查找元素值4,折半查找是如何做到的呢?...它需要先设置两个游标,一个指向最左边,一个指向最右边: 这两个游标所表示的范围即为查找区间,初始我们在下标为1到10的区间内查找,这个查找也是讲究方法的,不是一个一个地去遍历查找

1K20
您找到你想要的搜索结果了吗?
是的
没有找到

查找算法折半查找+分块查找

基本概念 查找表:由同一种类型的数据元素(记录)组成 静态查找表:只需要查找算法 动态查找表:除了查找,还需要增删改查数据元素 关键字:唯一标识数据元素的数据项 常见的查找算法 折半查找 概念 折半查找又称二分查找...算法 //查找算法 int binary_search(seqlist L,Elemtype key) { int low,high=L.TableLen-1,mid; while(low<=high)...(LOW=HIGH)/2}向下取整,则对于任何一个节点,必有右子树结点数-左子树结点数=0或1 折半查找判定树必定是平衡二叉树 折半查找判定树中,只有最下面一层是不满的,因此元素个数为n时,树高h={log2...(n+1)}向下取整 失败结点:n+1(等于成功节点的空链域数量) 分块查找 分块查找,又称索引顺序查找算法过程: 在索引表中确定待查记录所属的分块(可顺序,可折半) 在块中查找 若索引表中不包含目标关键字...,则折半查找索引表最终停在LOW>HIGH,要在LOW所指分块中查找

1.6K30

查找算法之顺序查找折半查找,二叉查找

折半查找   折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高。但是该算法的使用的前提是静态查找表中的数据必须是有序的。   ...例如,在{5,21,13,19,37,75,56,64,88 ,80,92}这个查找表使用折半查找算法查找数据之前,需要首先对该表中的数据按照所查的关键字进行排序:{5,13,19,21,37,56,64,75,80,88,92...折半查找算法   对静态查找表{5,13,19,21,37,56,64,75,80,88,92}采用折半查找算法查找关键字为 21 的过程为: ?               ...的空间开始存储数据 for (int i=1; i<=length; i++) { scanf("%d",&((*st)->elem[i].key)); } } //折半查找算法.../** * @Description: 折半查找算法 * @Param: SSTable *ST 指向结构体的指针,keyType key 要插入的元素 * @Return: 成功的返回key在查找表中的位置

1.5K30

DS静态查找折半查找

题目描述 给出一个队列和要查找的数值,找出数值在队列中的位置,队列位置从1开始 要求使用折半查找算法 输入 第一行输入n,表示队列有n个数据 第二行输入n个数据,都是正整数,用空格隔开 第三行输入t...,表示有t个要查找的数值 第四行起,输入t个数值,输入t行 输出 每行输出一个要查找的数值在队列的位置,如果查找不成功,输出字符串error 输入样例1  8 11 22 33 44 55 66...77 88 3 22 88 99 输出样例1 2 8 error 思路分析 折半查找就是二分查找,,对于一个有序数列,通过三个位置的变换(low、mid、high),相当于部分顺序查找...,只不过每次把查找的范围缩小一半。...,如果比mid位置的小,那么说明数值有可能在low和mid之间,那么就让high=mid-1,mid=(low+high)/2,继续查找下去,直到mid位置上的就是要查找的数值,或者low>high,查找结束

14320

折半查找 解题报告

折半查找 解题报告 折半查找查找方法中的一种,常用的查找方法还有遍历查找折半查找运用了二分的思想,也可称为二分查找。...例题 题目描述 有n个数(n<=1000000),这n个数已按从大到小顺序存放在一个数组中,然后有T次查询,每次输入一个数,要求用折半查找法找出该数在数组中第一次出现的位置。...10 9 8 7 6 5 4 3 2 1 2 9 5 样例输出 2 6 这道题目是典型的折半查找题目,输出查找元素在数组中第一次出现的位置,编写折半查找函数,再进行递归调用即可。...(当题目中要求的数组空间比较大时,一定要第一时间想到这样申请空间) 2、在折半查找函数中,如何突显出查找的范围变为1了呢?...=0;i<n;i++) { scanf("%d",&num); printf("%d\n",binaryfind(a,num,0,m-1)); } return 0; } (必须熟练了解算法原理

43130

二分查找---折半查找

有序数组中没有重复元素的情况下 #include using namespace std; //二分查找算法---返回查找到的元素的下标 //数组 数组长度 查找的值 int test...if (val > arr[mid]) { low = mid + 1; //那么要去比mid大的左边区间进行折半查找,需要把最小值更新到mid+1 } if (val < arr...[mid]) { high = mid - 1;//那么要去比mid小的右边区间进行折半查找,需要把最大值更新到mid-1 } if (val == arr[mid]) {...我们只需对else语句略作修改 #include using namespace std; //二分查找算法---返回查找到的元素的下标 //数组 数组长度 查找的值 int test...递归方法实现 #include using namespace std; //二分查找算法---返回查找到的元素的下标 //数组 数组长度 查找的值 int test(int arr

63910

折半查找部分有序

从这个思路无法判断,你明确表示出来 判断不了,你感觉没问题就是分析不出来呀 然后果断在换个思路 这个我一般不具备 不能在这里死磕 不然陷入了题目给造成的陷阱去了 Q1 有序数组折半是中间位置和查找元素...判断查找数据是否在有序数组A中 如果在A中对范围A进行查找 step 3 如果没有A中 对B重复步骤 1 2 ?...{ //查找数据在完全有序数组A中 只要对数组A进行折半查找24....[5,1] 最后两个元素分隔时候 if(nums[begin]<nums[mid] ) 改为 if(nums[begin]<=nums[mid] ) 难点: 当中间元素和查找元素不相等时候 如何确定查找元素范围...->通过通过比较中间元素 和开始和结束位置 确定完全有序范围 -> 从而推断查找元素范围

61490

二分查找折半查找)法

二分查找的前提是数据一定要有序,否则一切皆为空谈。通过有序的一段数据使用二分查找较常规遍历查找算法速度要快一些。其中二分查找发有两种实现,一种为常规while循环,另外一种为递归。...若相等,则查找成功。否则利用中间位置将集合分成两个子集。 若中间元素大于目标元素,则在左子集中查找,否则在右子集中查找。 重复以上操作,直至找到要查找的元素,或是直到子集不存在查找的数据。...include #include int binarySearch(int *data, int low, int high, int find) { // 循环进行查找.../ 2; // 判断除2后的下标所对应的数据是否就是我们找的数据 // 如果是则直接返回 if (data[mid] == find) return mid; // 否则判断该下标对应的数据是否大于查找的数据...%d 的值是我们需要的数据 %d:\n”, find, arr[find]); system(“pause”); return 0; } 下图是根据以上代码制作的二分查找法的示例图,可参考学习:

17620

经典排序之折半查找

折半查找,又称二分法查找。意在一个有序的序列当中,从最大值与最小值开始,从两个值的中间值为分渠道,再次判断是否位于区间内,重复获取中间值,直至找到需要查找的值。...折半查找,适用于数据量很大的情况。 具体是什么意思呢,一个例子搞定:数字炸弹游戏 一个1-100的数字,其中有一个数字是炸弹,每次猜一个数,怎么样才能猜出最快呢。...直到此,大概对与折半查找有这一定的理解了。...所以将第一个值定义为零,第二个值定义为数组的长度-1 var left=0; var right=arr.length-1; 定义一个循环,负责每次二分(折半查找。...return -1; 总结 折半查找(二分法)不仅仅是经典排序的问题,更是解决一些列数学问题的方法之一。其作用也不可小觑,日常生活中,包括娱乐游戏中也存在这类折半类型的娱乐活动。

23520

算法与数据结构(九) 查找表的顺序查找折半查找、插值查找以及Fibonacci查找(Swift版)

今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容。...本篇博客主要介绍查找表的顺序查找折半查找、插值查找以及Fibonacci查找。本篇博客会给出相应查找算法的示意图以及相关代码,并且给出相应的测试用例。...三、折半查找 折半查找又称为二分查找折半查找的作用对象是有序的查找表,也就是说,我们的查找表是已经排好序的。...之所以称为折半查找,是因为在每次关键字比较时,如果不匹配,则根据匹配结果将查找表一份为二,排除没有关键子的那一半,然后在含有关键字的那一半中继续折半查找。...在折半查找中我们知道mid = low + 1/2(high-low)。因为high-low前面的权值是1/2,所以会将查找表进行折半。插值查找就是将这个1/2权值修改成一个更为合理的一个值。

2K100
领券