查找算法---二分查找(递归方式)

本文介绍了如何在有序数组中使用递归方式进行二分查找。首先解释了二分查找的前提条件,即数组必须有序。接着,通过一个具体的例子阐述了二分查找的思路和步骤,包括确定中间下标并进行比较,以及设置递归的结束条件。在代码实现部分,指出了原始递归代码可能存在的问题,并提出改进方案,以处理有序数组中存在多个相同数值的情况,通过返回一个包含所有匹配下标的集合来解决。
摘要由CSDN通过智能技术生成

二分查找

前提条件

我们的二分查找必须是在有序数组中查找

无论是从小到大还是从大到小

题目

请对一个有序数组进行二分查找{1, 8,10,89,1000,1234},输入一个数
看看该数组是否在此数,姐出下标,如果没有就提示没有这个数”。

思路

我们这次的二分查找会用到递归的思想,当然也有非递归的方式,我是分开来学习了

1.首先确定数组的中间下标mid mid = (left+ right)/2

2.让需要查找的数findValue和我们的arr[mid]比较

​ 如果findValue>arr[mid],往右边递归

​ 如果findValue<arr[mid],向左边递归查找

​ 如果正好找到就返回

那我们的递归出口(结束条件)是什么

1.找到了,直接返回退出了

2.递归万整个数组,没有找到findValue,也需要结束递归时,当我们的left>right就代表要结束了

代码

//二分查找
//@author 王
public class BinarySearch {
   

	public static void main(String[] args) {
   
		// TODO Auto-generated method stub
		int arr[] = {
   1,8,10,89,1000,1234};//必须是有序数组
		int resultIndex = binarySearch(arr, 0, arr.length -1, 1234);
		System.out.println(resultIndex);
	}
	/**
	 * 
	 * @param arr			数组
	 * @param left			左边索引
	 * @param right			右边索引
	 * @param findValue		需要找的数字,找到返回下标,未找到返回-1
	 * @return
	 */
	//二分查找算法
	public static int binarySearch(int[] arr,int left,int right,int findValue) {
   
		int mid = (left+right)/2;
		int midValue = arr[mid];
		
		if(findValue >midValue){
   
			//向右递归
			return binarySearch(arr, mid
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会写代码的花城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值