700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 递归算法实现二分查找

递归算法实现二分查找

时间:2022-12-26 19:42:30

相关推荐

递归算法实现二分查找

目录

原二分查找代码

递归二分查找代码

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

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

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

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

递归实现素数判断/Jgrhc

原二分查找代码

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)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。