二分查找

97 阅读1分钟

二分查找

  • 变量初始化:首先,初始化两个变量low和high,分别表示查找范围的最小索引和最大索引。最初,low为0,high为数组arr的长度减1。
  • 循环查找:使用while循环进行查找过程。只要low小于或等于high,就继续循环。
  • 计算中间索引:用mid变量存储中间索引,通过(low+high)/2计算得到。这样可以将查找范围分成两部分。
  • 比较中间元素:如果arr[mid]等于key,说明找到了目标元素,返回true。
  • 排除不包含key的区域:如果arr[mid]大于key,说明key只可能在arr的前半部分,将high更新为mid-1,缩小查找范围。如果arr[mid]小于key,表明key只可能在arr的后半部分,将low更新为mid+1,缩小查找范围。
  • 查找结束:若循环结束后仍未找到key,返回false。

综上所述,该算法通过不断缩小查找范围,提高了查找效率,平均而言只需要(log2n)次比较操作,其中n为数组的长度。

/**
 * 二分查找
 */
public class BinarySearch {


    public static void main(String[] args) {

        int[] arr = {1,2,3,4,5,6,7,8,9,10};

        boolean b = searchExist(arr, 10);
        System.out.println(b);

    }


    public static boolean searchExist(int[] arr, int key) {


        int low = 0;
        int high = arr.length - 1;
        while (low <= high) {

            int mid = (low + high) / 2;
            if (arr[mid] == key) {
                return true;
            }
            if (arr[mid] > key) {
                high = mid - 1;
            }
            if (arr[mid] < key) {
                low = mid + 1;
            }

        }
        return false;

    }

}