Loading

Java 二分查找

思路

问题描述:在采用顺序存储结构的有序数组中,查找目标元素,如果目标元素存在,返回对应的数组下标。

假设查找的有序数组为升序,二分查找采用以下的思路进行解决:

  1. 将数组中间位置的元素与目标元素比较,如果二者相等,则查找成功;否则,从中间位置将数组分为前、后两个数组;

  2. 如果中间位置的元素大于目标元素,则进一步查找前一数组;否则,进一步查找后一数组;

  3. 重复步骤(1)和(2),直到找到满足条件的元素,返回数组下标,查找成功;否则,查找失败。

代码

	public int BinaryFind(int[] arr, int target) {
        int left = 0, right = arr.length - 1, mid = 0;

        // 判断数组下标left是否大于下标right, 如果left>right,说明无法拆分数组,查询结束
        while (left <= right) {
            mid = left + (right - left) / 2;
            if (target < arr[mid]) {
                right = mid - 1;
            } else if (target > arr[mid]) {
                left = mid + 1;
            } else {
                return mid;
            }
        }
        return -1;
    }
posted @ 2023-09-04 11:06  星流残阳  阅读(9)  评论(0编辑  收藏  举报