1. package com.atguigu.search;
    2. /**
    3. * ClassName: <br/>
    4. * Description: <br/>
    5. * Date: 2021-02-23 15:14 <br/>
    6. * <br/>
    7. *
    8. * @author yufengming
    9. * @version 产品版本信息 2021年02月23日15:14分 yufengming(yufengming@travelsky.com) 新建<br/>
    10. * <p>
    11. * 修改记录
    12. * @email yufengming@travelsky.com
    13. * @project data_algorithm
    14. * @package com.atguigu.search
    15. */
    16. public class BinarySearch {
    17. public static void main(String[] args) {
    18. int arr[] = {1, 9, 11, -1, 34, 89}; // 没有顺序的数组
    19. int resIndex = binarySearch(arr, 0, arr.length-1, 1);
    20. System.out.println(resIndex);
    21. }
    22. /**
    23. * 二分查找算法
    24. *
    25. * @param arr 数组
    26. * @param left 左边的索引
    27. * @param right 右边的索引
    28. * @param findVal 要查找的值
    29. * @return 找到返回下标, 没有找到返回-1
    30. */
    31. public static int binarySearch(int[] arr, int left, int right, int findVal) {
    32. // 当left > right 时,说明 递归完毕,但是没有找到
    33. if (left > right) {
    34. // 么有找到就返回 -1
    35. return -1;
    36. }
    37. int mid = (left + right) / 2;
    38. int midVal = arr[mid];
    39. if (findVal > midVal) {
    40. // 向右递归
    41. return binarySearch(arr, mid + 1, right, findVal);
    42. } else if (findVal < midVal) {
    43. return binarySearch(arr, left, mid - 1, findVal);
    44. } else {
    45. // 找到了
    46. return mid;
    47. }
    48. }
    49. }