leetcode:二分查找

while方式 

package com.sitech.iot.monitor.controller;

public class demo {
    public static int search(int[] nums, int target) {
        int l=0,r=nums.length-1;
        if(r==-1)
            return -1;
        while(l<=r){
            int mid=l+(r-l)/2;
            if(nums[mid]>target)
                r=mid-1;
            else if(nums[mid]<target)
                l=mid+1;
            else return mid;
        }
        return -1;
    }
    public static void  main(String[] args){
        int[]a={1,2,4,5,8};
        System.out.println(search(a,5));
    }
}

递归实现:

/**
	 * 使用递归的二分查找
	 *title:recursionBinarySearch
	 *@param arr 有序数组
	 *@param key 待查找关键字
	 *@return 找到的位置
	 */
	public static int recursionBinarySearch(int[] arr,int key,int low,int high){
		
		if(key < arr[low] || key > arr[high] || low > high){
			return -1;				
		}
		
		int middle = (low + high) / 2;			//初始中间位置
		if(arr[middle] > key){
			//比关键字大则关键字在左区域
			return recursionBinarySearch(arr, key, low, middle - 1);
		}else if(arr[middle] < key){
			//比关键字小则关键字在右区域
			return recursionBinarySearch(arr, key, middle + 1, high);
		}else {
			return middle;
		}	
		
	}

猜你喜欢

转载自blog.csdn.net/weixin_38261597/article/details/88873682