二分查詢的兩種實現形式遞迴和迭代

weixin_46248981發表於2020-11-08
//二分查詢,遞迴
public static int binarySearch(int[]arr,int left,int right,int findVal){
    //當left>right時,說明遞迴完整個陣列,仍然沒有找到目標數
    if(left>right){
        return -1;
    }
	int mid = (left+right)/2;
    int midVal = arr[mid];
    
    if(findVal >midVal){
        //向右遞迴
        return binarySearch(arr,mid+1,right,findVal);
    }else if(findVal<midVal){
        //向左遞迴
        return binarySearch(arr,left,mid-1,findVal);
    }else{
        return mid;
    }
}
//二分查詢,非遞迴方式,迭代
private int binarySearch(int[]nums,int target){
    int start = 0;
    int end = nums.length - 1;
    while(start<=end){
        int mid = (start + end) >>>1;
        if(nums[mid]==target){
            return mid;
        }else if(nums[mid]<target){
            //向右迭代
            start = mid +1;
        }eles{
            //向左迭代
			end = mid -1;
        }
    }
    return -1;
}

需要注意的是引申到二維陣列的二分查詢時,遞迴中傳入的right=nums[i].length。

相關文章