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

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

C语言函数二分查找(折半查找) 参考视频讲解哔哩哔哩比特鹏哥的视频 ——链接 二分查找 #include //二分查找 //在一个有序数组中查找具体的某个数 //如果找到了返回...//查找了一次范围就缩小了一半,这样的速度是比较快的 //这就叫二分查找(折半查找) //那么怎么找到中间元素的下标呢 //原来的数组是1 2 3 4 5 6 7 8 9 10 //他们的下标是...else { printf("找到了,下标是:%d\n",ret); } return 0; } //运行发现找不到结果——代码出现了问题 //自己找问题的方法 //部分位置添加注释后 二分查找...} else { printf("找到了,下标是:%d\n", ret); } return 0; } 既然传进去不行,那就在外面算, //修改版(注释已经删除)(只有修改后的注释) 二分查找...//在这里要进行很多次 //每一次二分查找的第一步是找被查找范围的中间元素的下标 while (left <= right) { int mid = (right + left

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

二分查找(折半查找

二分查找的前提是数据一定要有序,否则一切皆为空谈。通过有序的一段数据使用二分查找较常规遍历查找算法速度要快一些。其中二分查找发有两种实现,一种为常规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

二分查找

二分查找算法的前置条件是,一个已经排序好的序列(在本篇文章中为了说明问题的方便,假设这个序列是升序排列的),这样在查找所要查找的元素时,首先与序列中间的元素进行比较,如果大于这个元素,就在当前序列的后半部分继续查找...,如果小于这个元素,就在当前序列的前半部分继续查找,直到找到相同的元素,或者所查找的序列范围为空为止. int BinSearch(SeqList * R, int n , KeyType K ) {...//在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回-1    int low=0,high=n-1,mid; //置当前查找区间上、下界的初值    if(R[low].key...-1; //当low>high时表示查找区间为空,查找失败    } //BinSeareh int BinSearch2(int array[], int n, int v) { int...> 2.wiki上关于二分查找的说明:http://en.wikipedia.org/wiki/Binary_search int BinSearch1(int r[ ], int n,

36730

python二分查找

一、概述 1、条件 不是所有数据类型都可以应用二分查找,他需要满足以下的条件: 是一个有序序列(索引数组),且是已经排好序的序列. 2、查找原理 在一个有序序列中查找一个指定的数,如果首先和这个序列的中间数相比如果相等就找到返回...二、python代码实现 知道了条件和原理后,其他任何一门语言都可实现,以下是python代码的简单实现....参考代码 import math L = [1,56,58,60,66,70,7,98,100,111,49999,99999] count = 0 #定义统计查找次数 #查找是否在列表中 def...%num 查找66是否在列表中 并统计查找次数 print(bin_search(L,66)) 如图: ? 再来查找88时提示没有找到,如图: print(bin_search(L,88)) ?...总结: 通过二分查找查找一个数是否在列表中,要查找的数是中间数时,只要一次就能找到,最差的情况就是n/2 =0时,n为序列长度 但最后等于0时要么找到要么没有找到.不管怎么样比冒泡排序效率要高的多

97030

二分查找解题思路

二分查找解题思路 每次从数组的中间,比较 需要找的 值,如果小于中位数,则在数组前一半找,如果大于,则在数组后一半找 * 1、首先二分查找需要先排序 * 2、所以 传参是开始下标,结束下标,数组...* 3、必须先用首尾下标 计算出他的 中点下标 * 4、计算是否 大于中位数 或者 小于 中位数,执行 mid +1 或者 mid -1 /** * 二分查找接题思路 * 每次从数组的中间...,比较 需要找的 值,如果小于中位数,则在数组前一半找,如果大于,则在数组后一半找 * * 1、首先二分查找需要先排序 * 2、所以 传参是开始下标,结束下标,数组...arr[i] = Integer.valueOf(str.charAt(i)); } Arrays.sort(arr); // 开始查找

21710

C语言二分查找与冒泡排序

✨作者:@平凡的人1 ✨专栏:《C语言从0到1》 ✨一句话:凡是过往,皆为序章 ✨说明: 过去无可挽回, 未来可以改变 ---- 二分查找 在有序数组中查找具体的某个数字n,...我们一般从中间元素开始找,查一次去掉一半数字,这种方法我们给它取名为折半查找即为二分查找,效率大大提高!怎么理解呢?...在计算机科学中, 二分搜索 (英语:binary search),也称 折半搜索 (英语:half-interval search)、 对数搜索 (英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索...注意点:关键在于有序数组,也就是说,二分查找存在缺陷:不能在无序数组中使用,当然对于无序数组你也可以选择排一下序。...思路分析 二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2](即中间元素)与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,

95330

C语言练习之二分

前言 二分查一个数 编写代码在一个整形有序数组中查找具体的某个数 要求:找到了就打印数字所在的下标,找不到则输出:找不到。...思路 设数组的第一个值下标为left,最后一个值下标为right; 假设left和right的中间值为mid = left+(right-left)/2 设置一个循环,判断mid对应的数是否等于所查找的数...int mid = 0; int input = 0; printf("请输入您要查找的数字:>"); scanf("%d", &input); while (left <= right)//当...{ left = mid; } } return 0; } 运行截图: ---- 总结   以上就是今天要讲的内容,本文简单的介绍了用C语言在一个有序整数数组中用二分查找查找一个数返回它的下标的思路...本文的作者也只是一个正在学习C语言等编程知识的萌新,若这篇文章中有哪些不正确的内容,请在评论区向作者指出(也可以私信作者),欢迎大佬们指点,也欢迎其他正在学习C语言的萌新和作者进行交流。

26210

C语言实现二分

从一堆有序数字中找出其中一个数字 有两种方法 1)从头到尾依次寻找 2)从该些数字中中间部位比较若小于要找数字则在后半部分否则在前半部分 再进行这样的方式进行循环,直至找到或找不到此数字 现介绍这样的方法——二分...在计算机科学中,二分搜索(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法...搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。

8610
领券