二分查找-----非递归方式

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

首先我们要清楚使用我们的二分查找算法的前提条件:

二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找

二分查找的思路

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

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

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

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

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

​ 如果正好找到就返回

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

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

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

那我们的非递归方式是怎么来查找呢

非递归代码

public class BinnarySearchNoRecur {
    
    
	public static void main(String[] args) {
    
    
		int arr[] = {
    
    1,3,8,10,11,67,100};
		int index = binnarySearch(arr, 11);
		System.out.println(index);
	}

	/**
	//二分查找的非递归实现
	 * @param arr	待查找数组		该数组升序
	 * @param target	待查找的值
	 * @return	找到返回对应下标,没找到返回-1
	 */
	public static int binnarySearch(int[] arr,int target){
    
    
		int left = 0;
		int right = arr.length-1;
		while(left<=right){
    
    //可以继续查找
			int mid = (left + right) / 2;
			if(arr[mid] == target){
    
    
				return mid;
			}else if(arr[mid] > target){
    
    
				right = mid - 1;//向左边查找
			}else{
    
    
				left = mid + 1;//向右边查找
			}
		}
		return -1;
	}
}

我们发现没有以前的向左递归向右递归了,我们是通过了while循环来控制我们的方法一直在进行,动态改变我们的left和right的值,达到递归相同的效果

猜你喜欢

转载自blog.csdn.net/qq_22155255/article/details/113869073
今日推荐