首页 > 其他 > 详细

二分法

时间:2020-08-17 08:24:36      阅读:67      评论:0      收藏:0      [点我收藏+]

对于区间[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);
    }
}

二分法

原文:https://www.cnblogs.com/ccink/p/13515299.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!