package com.atguigu.search;

/**
 * ClassName:  <br/>
 * Description:  <br/>
 * Date: 2021-02-23 15:14 <br/>
 * <br/>
 *
 * @author yufengming
 * @version 产品版本信息 2021年02月23日15:14分 yufengming(yufengming@colemak.com) 新建<br/>
 * <p>
 * 修改记录
 * @email yufengming@colemak.com
 * @project data_algorithm
 * @package com.atguigu.search
 */
public class BinarySearch {
    public static void main(String[] args) {
        int arr[] = {1, 9, 11, -1, 34, 89}; // 没有顺序的数组
        int resIndex = binarySearch(arr, 0, arr.length-1, 1);
        System.out.println(resIndex);
    }

    /**
     * 二分查找算法
     *
     * @param arr     数组
     * @param left    左边的索引
     * @param right   右边的索引
     * @param findVal 要查找的值
     * @return 找到返回下标, 没有找到返回-1
     */
    public static int binarySearch(int[] arr, int left, int right, int findVal) {
        // 当left > right 时,说明 递归完毕,但是没有找到
        if (left > right) {
            // 么有找到就返回 -1
            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;
        }

    }
}


results matching ""

    No results matching ""