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

C语言函数二分查找(折半查找)

C语言函数二分查找(折半查找) 参考视频讲解哔哩哔哩比特鹏哥的视频 ——链接 二分查找 #include //二分查找 //在一个有序数组中查找具体的某个数 //如果找到了返回...//查找了一次范围就缩小了一半,这样的速度是比较快的 //这就叫二分查找(折半查找) //那么怎么找到中间元素的下标呢 //原来的数组是1 2 3 4 5 6 7 8 9 10 //他们的下标是...//左右下标又可以求出一个平均值是7,又找到一个对应的元素是8 //所以这一组查找范围的中间元素是8 //用8再跟我要找的元素比一下,比我找的元素要大 //说明我要查找的元素在8的左边 //这时候要查找的范围被再次的缩小成了...//一直找到左右下标无法确定新的范围,他们之间没有元素可以被查找的时候,结束,说明没有找到 //如果在某一次查找的时候,找到了,下标相等了,说明找到了,把下标给过来 int number_search...//在这里要进行很多次 //每一次二分查找的第一步是找被查找范围的中间元素的下标 while (left <= right) { int mid = (right + left

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

查找算法】折半查找

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

1K20

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

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

1.6K30

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

折半查找 解题报告

折半查找 解题报告 折半查找查找方法中的一种,常用的查找方法还有遍历查找折半查找运用了二分的思想,也可称为二分查找。...mid]与k的大小关系,在相应的数组前半段或是后半段中进行查找,不断缩小查找范围(第i次的查找范围是第i-1次的一半),此时需要 递归调用二分查找函数。...例题 题目描述 有n个数(n<=1000000),这n个数已按从大到小顺序存放在一个数组中,然后有T次查询,每次输入一个数,要求用折半查找法找出该数在数组中第一次出现的位置。...10 9 8 7 6 5 4 3 2 1 2 9 5 样例输出 2 6 这道题目是典型的折半查找题目,输出查找元素在数组中第一次出现的位置,编写折半查找函数,再进行递归调用即可。...(当题目中要求的数组空间比较大时,一定要第一时间想到这样申请空间) 2、在折半查找函数中,如何突显出查找的范围变为1了呢?

43130

经典折半查找算法

本文完整阅读需要的基础知识:循环结构,数组,函数,递归。 n个由小到大排好序的数,再给一个数x,判断这个数在数组中有没有出现过,如果有,就输出这个数在数组的位置,没有就输出”NO”....而用折半查找,开始的比较区间是1-6, 先取中间一个数,即第3个数6, 9比6大,说明在6的后面,下面就把区间变成4-6, 取中间数,即第5个数9,正好找到,这样总次数变成2次查找。...++) if (a[i]==key) return i; return -1; } 普通的二分查找(非递归) int binarySearch(int a[] , int first, int last...+ 1; else if( a[mid] > key) right = mid - 1; } return -1; // 未找到key } 用递归算法完成二分查找...满足 >=x的范围中查找最小的一个 考虑“求某个条件C(x)的最小x” ,这个问题,对于任意满足C(x)的x,如果所有的x’ > x 也满足C(x’)的话,这个问题可以想像成一个特殊的单调函数,在s的一侧不合法

78130

折半查找部分有序

从这个思路无法判断,你明确表示出来 判断不了,你感觉没问题就是分析不出来呀 然后果断在换个思路 这个我一般不具备 不能在这里死磕 不然陷入了题目给造成的陷阱去了 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] ) 难点: 当中间元素和查找元素不相等时候 如何确定查找元素范围...->通过通过比较中间元素 和开始和结束位置 确定完全有序范围 -> 从而推断查找元素范围

61390

C语言函数递归_c语言递归举例

今天说一说C语言函数递归_c语言递归举例,希望能够帮助大家进步!!! 文章目录 函数递归 什么是递归?...递归的俩个必要条件 代码引例1 栈溢出(Stack Overflow) 合理使用递归 代码引例3 代码引例4 解释要合理使用递归 结束语 函数递归 程序调用自身的编程技巧称为递归 recursion)...第一次接触递归都会很懵,慢慢理解这个过程就明白了。 什么是递归递归做为一种算法在程序设计语言中广泛应用。...所以遇到问题时,我们应该明白是要把问题简单化,而不是习惯用递归,就一直用递归思考问题 我们应该清楚是不是用递归的思想会比较简单,或者换成递归的思想也可以实现,我们可以通过例题明白 代码引例3 求n的阶乘...当一个问题相当复杂,难以用迭代实现时,此时递归实现的简洁性便可以补偿它所带来的运行时开销 结束语 本人是学c小白,这些是近期学习整理总结,有什么不对欢迎大家指正,我会继续努力,谢谢~!

13.7K31

二分查找折半查找)法

二分查找的前提是数据一定要有序,否则一切皆为空谈。通过有序的一段数据使用二分查找较常规遍历查找算法速度要快一些。其中二分查找发有两种实现,一种为常规while循环,另外一种为递归。...若相等,则查找成功。否则利用中间位置将集合分成两个子集。 若中间元素大于目标元素,则在左子集中查找,否则在右子集中查找。 重复以上操作,直至找到要查找的元素,或是直到子集不存在查找的数据。...include #include int binarySearch(int *data, int low, int high, int find) { // 循环进行查找...%d 的值是我们需要的数据 %d:\n”, find, arr[find]); system(“pause”); return 0; } 另外一种递归实现方式如下: #include #include int binarySearch(int* data, int low, int high, int find) { // 循环的终止条件,也就是递归的终止条件

17520

经典排序之折半查找

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

23420

DS查找——折半查找求平方根

题目描述 假定输入y是整数,我们用折半查找来找这个平方根。...在从0到y之间必定有一个取值是y的平方根,如果我们查找的数x比y的平方根小,则x2y,我们可以据此缩小查找范围,当我们查找的数足够准确时(比如满足|x2-...2.265625 2.2265625 … … 最后求得5的平方根为2.236 温馨提示: 计算过程中为确保精确性,计算变量的类型都用double 保留小数位数的输出,C语言参考格式...printf("%.3lf\n",x) ;C++参考cout<<fixed<<setprecision(3)<<x<<endl;(要包含头文件Iomanip) 程序框架参考平时练习中折半查找的方法 输入...输入样例1  2 13 5 输出样例1 3.606 2.236 思路分析 类似于,或者是就是二分查找

14020

C语言:函数递归

一、什么是递归 递归式一种解决问题的方法,在C语言中,递归就是自己调用自己。...递归的思想: 把⼀个⼤型复杂问题层层转化为⼀个与原问题相似,但规模较小的⼦问题来求解;直到⼦问题不能再被拆分,递归就结束了。所以递归的思考⽅式就是把⼤事化小的过程。...而不能无限制地递归 二、递归的限制条件 为了防止死递归,有2个必要条件: 1、递归存在限制条件,当满足这个条件的时候,递归便不再继续(也就是说,我们要设置让递归停止下来的条件) 2、每次递归的调用要越来越接近这个限制条件...(要慢慢让递归停下来) 三、递归的举例 3.1 求n的阶乘 我们知道n的阶乘的公式: n!...1个圆盘通过C先挪动到B上 Move(a, c, n);//将第n个圆盘放到c上 Hanoi(b, a, c, n - 1);//将b上的n-1个圆盘通过a挪动到c上 } } int main

7710
领券