BM17 二分查找-I

一.非递归法

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @param target int整型 
     * @return int整型
     */
    public int search (int[] nums, int target) {
        // write code here

        //如果数组长度为0,返回-1,找不到目标值
        if (nums.length == 0) return -1;

        //记录数组的长度
        int lenSize = nums.length;

        //定义一个左下标和右下标
        int left = 0;
        int right = nums.length - 1;
        
        //当left小于等于right时进行判断
        while (left <= right) {
            
            //定义中间值mid
            int mid = (left + right) / 2;

            /**
             * 小于中间值,说明在左半区,
             * 大于中间值,说明在右边区
             */
            if (nums[mid] < target)
                left = mid + 1;
            else if (nums[mid] > target) {
                right = mid - 1;
            }else return mid;
        }
        
        //没找见,返回-1
        return -1;
    }
}

二.递归法

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @param target int整型 
     * @return int整型
     */
    public int search (int[] nums, int target) {
        // write code here
        if (nums.length == 0) return -1;
        return searchBinaryNum(nums,0,nums.length - 1,target);
    }

    //定义一个中间值
    int mid = 0;
    private int searchBinaryNum(int[] nums,int left,int right,int target) {
        
        //如果数组长度为0,返回-1
        if (nums.length == 0) return -1;
        
        //当left小于等于right的时候进行递归
        if (left <= right) {
            
            //mid就是left和right的中间值
            mid = (left + right) / 2;

            /**
             * 比中间值大递归右边,
             * 比中间值小递归左边
             */
            if (nums[mid] > target) searchBinaryNum(nums,left,mid - 1,target);
            else if (nums[mid] < target) searchBinaryNum(nums,mid + 1,right,target);
        }
        
        //如果找见了,返回mid下标,否则就返回-1
        return (nums[mid] == target) ? mid : -1;
    }
}

你可能感兴趣的:(二分查找/排序,数据结构)