二分法

对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值。

1.适用场景

  • 有序的数组,没有重复的数据元组
  • 使用场景:数据量较大

2.算法简述

如果 value==arr[mid],中间值正好等于要查找的值,则返回下标,return mid;

如果 value<arr[mid],要找的值小于中间的值,则再往数组的小端找,high=mid-1;

如果 value>arr[mid],要找的值大于中间的值,则再往数组的大端找,low=mid+1;

3. 代码

public class dichotomySearch {
    public static int search(int[] arr, int key) {
        int start = 0;
        int end = arr.length - 1;
        while (start <= end) {
            int middle = (start + end) / 2;
            if (key < arr[middle])
                end = middle - 1;
            else if (key > arr[middle]) {
                start = middle + 1;
            } else
                return middle;
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int key = 6;
        int index = search(arr, key);
        System.out.println(index);
    }
}
posted @ 2020-08-17 00:39  云卷云舒c  阅读(149)  评论(0编辑  收藏  举报