二分查找的递归非递归实现

430 阅读1分钟

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列

过程:首先,假设表中元素是按升序排列,将target与表中元素中间数值进行比较,如果nums[mid]==target,则mid就是需要查找的数,如果nums[mid]<traget,将mid+1赋值给left,如果nums[mid]>traget,将mid-1赋值给right,没找到则返回-1.

非递归实现:

int binarySearch(int[] nums, int target) {
    int left = 0; 
    int right = nums.length - 1; 

    while(left <= right) { 
        int mid = (right + left) / 2;
        if(nums[mid] == target)
            return mid; 
        else if (nums[mid] < target)
            left = mid + 1; 
        else if (nums[mid] > target)
            right = mid - 1;
        }
    return -1;
}

递归实现:

int binarySearch(int[] nums, int target,int start,int end) {
    int left = 0; 
    int right = nums.length - 1; 

    while(left <= right) { 
        int mid = (right + left) / 2;
        if(nums[mid] == target)
            return mid; 
        else if (nums[mid] < target)
            return binarySearch(nums,target,mid+1,right)
        else if (nums[mid] > target)
            return binarySearch(nums,target,left,mid-1)
        }
    return -1;
}