递归算法实现二分查找

简介: 本文简要介绍了递归实现的二分查找算法,这是一种在有序列表中快速查找的策略。递归方法虽在实际应用中较少,但有助于理解递归思想,为学习数据结构中的树内容打下基础。文中提供了原版和递归版本的二分查找代码,并强调了递归算法中处理未找到情况的注意事项。此外,还提到了递归在解决复杂问题时的优势,并通过链接分享了一个关于递归实现素数判断的例子。

本文简单介绍二分查找的递归算法。


对一个有序的列表通过按中间元素切分搜索空间进行快速查找的,也可以通过递归方法实现。


虽然该算法实际应用中较少,但其中的递归思路大家可以熟悉一下,为学习数据结构中树的相关内容作一个铺垫。前后代码都简单易懂,因而不作过多的赘述,诸位读者直接阅读代码即可。唯一的点在于,递归算法中找不到的情况“return -1”的书写位置和条件需要注意。


本文的呈现想法和下面这篇文章相同,作为开拓思路、加深对递归函数的理解而为之。其实很多基础的算法,包括斐波那契数列、闰年等,都可以用递归实现。递归思路能将复杂的问题呈现以简单的思路,这是它的优势。通过简单问题的递归实现,大家可以提前熟悉递归的构造和运用,为后续学习数据结构“树”的相关内容作铺垫。


递归实现素数判断


https://blog.csdn.net/weixin_45423659/article/details/137929767?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22137929767%22%2C%22source%22%3A%22u012979538%22%7D&fromshare=blogdetail


原二分查找代码


int binarySearch(int* arr,int left,int right,int key){
  while(left <= right){
    int mid = (left+right)/2;
    if(key > arr[mid]){
      left = mid + 1;
    }else if(key < arr[mid]){
      right = mid - 1;
    }else{
      return mid;
    }
  }
  return -1;
}


递归二分查找代码


思路:将迭代换为递归


1. 找重复(规模更小)


每次重复的过程均为:判断目标数字key与中间元素arr[mid]的大小 --> 缩小范围


2. 找变化(确定参数)


变化的量始终是查找范围的边界(left和right),将它们写入递归函数的参数列表。


3. 找出口


当找到目标数字时,递归函数开始返回值mid,因而条件即为 key == arr[mid]


int binarySearch(int* arr,int left,int right,int key){
 
  if(left > right){
    return -1;
  }
  int mid = (left+right)/2;
  if(key > arr[mid]){
    //left = mid + 1;
    binarySearch(arr,mid + 1,right,key);
  }else if(key < arr[mid]){
    //right = mid - 1;
    binarySearch(arr,left,mid-1,key);
  }else if(key == arr[mid]){
    return mid;
  } 
}


时间复杂度与空间复杂度均为O(logN)




相关文章
|
3月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
1月前
|
算法 C# 索引
C#二分查找算法
C#二分查找算法
|
1月前
|
存储 算法 C语言
【C语言】二分查找算法
【C语言】二分查找算法
|
1月前
|
消息中间件 存储 算法
一文搞懂二分查找算法!
一文搞懂二分查找算法!
|
1月前
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
20 0
|
3月前
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组
|
3月前
|
算法
【算法】二分查找——二分查找
【算法】二分查找——二分查找
|
4月前
|
算法
【算法】二分查找(整数二分和浮点数二分)
算法学习——二分查找(整数二分和浮点数二分)
43 0
【算法】二分查找(整数二分和浮点数二分)
|
5月前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
5月前
|
机器学习/深度学习 算法 索引
数据结构算法--1 顺序查找二分查找
**顺序查找时间复杂度为O(n)**,适合无序列表,可以通过`enumerate`或直接遍历索引来实现。**二分查找时间复杂度为O(logn)**,适用于有序列表,利用Python中`left`、`right`指针和`mid`点不断缩小搜索范围。效率上二分查找更优。