Java数据结构学习Day3_递归_二分查找问题

Java递归——二分查找问题

二分查找

前提:查找的数组必须是有序的
查找过程:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
图解:

代码如下

package Ivan.Search;

import java.util.*;


//使用二分查找的前提是该数组是有序的
public class BinarySearch {
    public static void main(String[] args) {
        int[] arr = {1, 3, 4, 5, 6, 7, 3, 34, 44, 5, 6, 7, 89, 23, 34, 6, 72, 60};
        Arrays.sort(arr);
        int temp = binarySearch(arr, 43, 0, arr.length - 1);
        System.out.println(temp);
    }

    //二分查找算法

    /**
     * @param arr   需要查找的数组
     * @param n     需要查找的值
     * @param left  左边界
     * @param right 右边界
     * @return 找到返回下标,没找到返回-1
     */
    public static int binarySearch(int[] arr, int n, int left, int right) {
        if (n < arr[left] || n > arr[right] || left > right) {      //判断是否越界
            return -1;
        }
        int mid = (left + right) / 2;
        int midValue = arr[mid];
        if (midValue < n) {
            return binarySearch(arr, n, mid + 1, right);
        } else if (midValue > n) {
            return binarySearch(arr, n, left, mid - 1);
        } else {
            return mid;
        }

    }
}

运行结果

posted @ 2020-06-11 16:40  Ivanpp  阅读(101)  评论(0编辑  收藏  举报