二分查找的C程序(递归和迭代)

二分查找的c程序(递归和迭代)

二分查找算法是一种基于比较和分割机制的算法。二分搜索算法也称为半间隔搜索、对数搜索或二分查找。二分查找算法,在已排序数组中查找目标值的位置。它将目标值与数组的中间元素进行比较。如果该元素等于目标元素,则算法返回找到的元素的索引。如果它们不相等,则搜索算法使用该数组的一半部分,根据值的比较,算法使用前半部分(当值小于中间时)和后半部分(当值小于中间时)当该值大于中间值时)。对下一个数组的一半执行相同的操作。

Input:A[] = {0,2,6,11,12,18,34,45,55,99}n=55Output:55 at Index = 8

解释

对于我们的数组

我们将比较 55 和数组的中间元素 18,它小于 55所以我们将使用数组的后半部分,即数组 {24, 45, 55, 99},中间也是 55。用它检查搜索元素的值。并且匹配到的值,那么我们将返回该值的索引为8。

如果搜索元素小于中间,那么我们将使用前半部分并继续直到元素在数组的中间找到。

为了实现二分查找,我们可以用两种方式编写代码。这两种方式仅与我们调用检查二分搜索元素的函数的方式不同。它们是:

使用迭代 – 这意味着在函数内使用循环来检查中间元素的相等性。

使用 在此方法中,函数使用一组不同的值一次又一次地调用自身。

示例

#includeint iterativeBsearch(int A[], int size, int element);int main() {   int A[] = {0,12,6,12,12,18,34,45,55,99};   int n=55;   printf("%d is found at Index %d 

",n,iterativeBsearch(A,10,n)); return 0;}int iterativeBsearch(int A[], int size, int element) { int start = 0; int end = size-1; while(start<=end) { int mid = (start+end)/2; if( A[mid] == element) { return mid; } else if( element < A[mid] ) { end = mid-1; } else { start = mid+1; } } return -1;}

输出

55 is found at Index 8

示例

#includeint RecursiveBsearch(int A[], int start, int end, int element) {   if(start>end) return -1;      int mid = (start+end)/2;   if( A[mid] == element ) return mid;   else if( element < A[mid] )      RecursiveBsearch(A, start, mid-1, element);   else      RecursiveBsearch(A, mid+1, end, element);}int main() {   int A[] = {0,2,6,11,12,18,34,45,55,99};   int n=55;   printf("%d is found at Index %d 

",n,RecursiveBsearch(A,0,9,n)); return 0;}

输出

55 is found at Index 8

以上就是二分查找的C程序(递归和迭代)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1444547.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 21:39:14
下一篇 2025年12月13日 14:05:43

相关推荐

  • C++程序来找出至少需要获得多少分才能达到G分的分数

    假设我们有两个数组p和c,每个数组都有D个元素,并且还有另一个数字G。考虑在编程竞赛中,每个问题的分数都基于其难度。问题p[i]的分数为100i。这些p[1] + … + p[D]问题是竞赛中的所有问题。编程网站上的用户有一个数字total_score。用户的total_score是以下…

    2025年12月17日
    000
  • C++程序按值对字典进行排序

    有一些被称为字典的数据结构在各种计算机语言中可用。一种特殊形式的更快的数据结构,它根据键和值存储数据,就是字典。它将键值对保留在那里,以便可以通过键快速搜索某些组件,几乎实时。类似字典的数据结构包含在C++ STL语言标准中。这个数据结构被称为”map“。map生成任何类型的…

    2025年12月17日
    000
  • 十进制转二进制的C语言程序实现

    问题 如何使用C语言中的函数将十进制数转换为二进制数? 解决办法 在在这个程序中,我们在 main() 中调用一个二进制函数。被调用的二进制数转换函数将执行实际的转换。 我们使用的将十进制数转换为二进制数的调用函数的逻辑如下 – while(dno != 0){ rem = dno % …

    2025年12月17日 好文分享
    000
  • C程序检查强数

    给定一个数字’n’,我们需要检查给定的数字是否是强数。 强数是指其所有数字的阶乘之和等于数字’n’。阶乘是指将小于该数字的所有数字(包括该数字)相乘的结果,用!(感叹号)表示。例如:4!= 4x3x2x1 = 24。 因此,要确定一个数字是否是强数,我…

    2025年12月17日
    000
  • C++程序打印8个星星图案

    以金字塔、正方形和菱形等不同格式显示星形图案非常有用常见于基础编程和逻辑构建。我们见过几颗星星学习编程中的循环语句时的数字模式问题。在本文中,我们将在 C++ 中显示由星星组成的数字八 (8)。 在这个程序中,我们取行号 n,它是 8 的上半部分的大小。下半部分将是相同的。八个图案如下所示 带星星的…

    2025年12月17日
    000
  • 获取给定复数的虚部的C++程序

    现代科学在很大程度上依赖于复数的概念,这一概念最初是通过Girolamo Cardano在16世纪引入的在17世纪初建立。复数的公式是 a + ib,其中 a 保留html代码并且b是实数。一个复数被认为有两个部分:实部和虚部()。i或iota的值为√-1。C++中的复数类是一个用于表示复数的类。C…

    2025年12月17日
    000
  • C程序实现校验和

    什么是校验和? 在计算中,校验和是使用算法从较大数据集创建的小尺寸数据,其目的是对较大数据集所做的任何更改都会导致不同的校验和。校验和通常用于验证已传输或存储的数据的完整性,因为数据中的错误或修改可能会导致校验和更改。它们还可以用于验证数据的真实性,因为校验和通常是使用只有发送者和接收者知道的密钥生…

    2025年12月17日
    000
  • 在C程序中,编写自己的幂运算函数,但不能使用乘法(*)和除法(/)操作符

    幂函数是使用乘法运算符进行计算的,即5n等于5*5*5… n次。为了使该函数在不使用乘法(*)和除法(/)运算符的情况下正常工作,我们将使用嵌套循环来重复添加数字n次。 示例 #include using namespace std;int main() { int a= 4 , b = 2; if…

    2025年12月17日
    000
  • 将以下内容翻译为中文:C程序将罗马数字转换为十进制数字

    给出以下是一个将罗马数字转换为十进制数字的C语言算法: 算法 步骤1 – 开始 步骤2 – 在运行时读取罗马数字 步骤3 – 长度: = strlen(roman) 步骤4 – 对于i = 0到长度-1       步骤4.1 – swit…

    2025年12月17日
    000
  • C程序查找形成回文的最小插入次数

    回文是一个与其反转相等的字符串。给定一个字符串,我们需要找到使该字符串成为回文所需的最小插入任意字符的数量。我们将看到三种方法:首先是递归方法,然后我们将记忆化这个解决方案,最后,我们将实现动态规划方法。 递归方法 示例 #include // library for input and outpu…

    2025年12月17日
    000
  • 在C程序中的Windows线程API

    线程是在 Windows API 中使用 CreateThread() 函数创建的,并且就像在 Pthreads 中一样,安全信息、堆栈大小和线程标志等一组属性将传递给该函数。在下面的程序中,我们使用这些属性的默认值。 (默认值最初不会将线程设置为挂起状态,而是使其有资格由 CPU 调度程序运行。)…

    2025年12月17日
    000
  • C程序在数组中找到最小和最大的质数

    问题陈述 给定一个包含 n 个正整数的数组。我们必须找到素数具有最小值和最大值的数字。 如果给定的数组是 – arr [] = {10, 4, 1, 12, 13, 7, 6, 2, 27, 33}then minimum prime number is 2 and maximum pr…

    2025年12月17日
    000
  • 在C程序中使用递归函数的辅助空间?

    这里我们将看到递归函数调用如何需要辅助空间。它与普通函数调用有何不同? 假设我们有一个如下所示的函数 – long fact(int n){ if(n == 0 || n == 1) return 1; return n * fact(n-1);} 该函数是递归函数。当我们像fact(5…

    2025年12月17日
    000
  • C++程序将一个数组推入另一个数组中

    A linear sequential data structure called an array is used to store homogeneous data in a series of memory regions. An array needs to have certain fea…

    2025年12月17日
    000
  • 编写一个C程序,使用elseif语句将数字打印为单词

    问题 在不使用 switch case 的情况下,如何使用 C 编程语言以文字形式打印给定的数字? 解决方案 在此程序中,我们检查三个条件以用单词打印两位数 – if(no99) if(no99) p> 输入的数字不是两位数 else if(no==0) 将第一个数字打印为零 el…

    2025年12月17日
    000
  • C++程序以给定值为参数,寻找双曲反余弦的函数

    类似于普通三角函数,双曲函数是使用双曲线而不是圆来定义的。从指定的弧度角度,它返回双曲余弦函数中的比值参数。但换句话说,它是相反的。需要使用反双曲三角运算(如反双曲余弦运算)来确定双曲余弦值对应的角度。 使用双曲余弦值计算角度,以弧度为单位,本教程将展示如何使用C++双曲反余弦(acosh)函数。双…

    2025年12月17日
    000
  • 基数排序的C程序

    排序算法是一种按特定顺序排列列表组件的算法。最常用的顺序是数字顺序和字典顺序。 基数排序是一种非比较排序算法。基数排序算法是未排序列表的首选算法。 它通过最初对相同位值的各个数字进行分组来对元素进行排序。基数排序的思想是按照递增/递减顺序从最低有效数字(LSD)到最高有效数字(MSD)进行逐位排序。…

    2025年12月17日
    000
  • 给定一个数字,编写一个C程序来找到斐波那契数列

    斐波那契数列是通过将前两个数字相加得到的一系列数字。 斐波那契数列从两个数字f0和f1开始。 fo和f1的初始值可以取0、1或1、1。 Fibonacci序列满足以下条件: fn = fn-1 + fn-2 算法 参考Fibonacci序列的算法。 STARTStep 1: Read integer…

    2025年12月17日
    000
  • 编写一个C程序,将给定的天数转换为年、周和天

    给定了天数,任务是将给定的天数转换为年、周和天。 让我们假设一年中的天数 =365 年数=(天数)/365 解释-:年数将是除以给定天数得到的商与 365 周数 = (天数 % 365) / 7 解释-:周数将通过收集余数获得将天数除以 365,再除以一周的天数 7。 天数 = (天数 % 365)…

    2025年12月17日
    000
  • 在C程序中,从给定的数组中打印下三角矩阵模式

    给定一个 n x n 的矩阵,任务是以下三角形式打印出该矩阵。 下三角矩阵是一个矩阵,其主对角线以下的元素包括主对角线元素,其余元素均为零。 我们通过以下图示来理解: 上述绿色元素是主对角线以下的元素,红色元素是主对角线以上的元素,它们被设为零。 示例 Input: matrix[3][3] = {…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信