三、Java版二分法算法

一、核心思想

选定这批数据中居中间位置的一个数与所查数比较,看是否为所找的数,若不是,则利用数据的有效性,可以决定所找的数是在选定数的左侧还是右侧,从而很快可以将查找范围缩小一半。以同样的方法在选定区域中进行查找,每次都会将查找范围缩小一半,从而较快的找到目的数。
有个限制条件就是:必须是有序数组!

二、源码

package com.ctw;

/**
 * @author TongWei.Chen 2018-09-25 16:20:15
 * @Description:
 * @Project sjjg-sf
 */
public class BinaryFind {

    /**
     * 二分查找
     *
     * @param arr:数组
     * @param value:所需要找的值
     * @return: 目的值所在数组的下标
     */
    public static int binaryFind(long[] arr, long value) {
        // 开始值
        int start = 0;
        // 末尾值
        int end = arr.length - 1;
        while (start <= end) {
            // 中间值,二分法嘛,先取个中再说,每次进行二分的时候都需要重新计算中间值,所以放到循环里面。
            int middle = (start + end) / 2;
            // 1.如果碰巧了,目标值直接就是中间值
            if (value == arr[middle]) {
                return middle;
            } else if(value < arr[middle]) {
                // 2.若目标值比中间值小,那肯定是在中间值左侧,则继续从0到中间值这区间进行二分查找。
                end = middle - 1;
            } else {
                // 3.若目标值比中间值大,那肯定是在中间值右侧,则继续从中间值到末尾值这区间进行二分查找。
                start = middle + 1;
            }
        }
        // 若所找的数不在数组里,则返回-1;
        return -1;
    }

    public static void main(String[] args) {
        MyArray myArray = new MyArray();
        myArray.add(1L);
        myArray.add(2L);
        myArray.add(3L);
        myArray.add(4L);
        myArray.add(5L);
        myArray.add(6L);
        myArray.add(12L);
        myArray.add(20L);
        myArray.add(30L);
        myArray.add(33L);
        int index = binaryFind(myArray.getArr(), 331L);
        System.out.println(index);
    }

}

三、广告

  • 码云地址

    https://gitee.com/geekerdream/

  • QQ群【Java初学者学习交流群】:458430385

  • 微信公众号【Java码农社区】

    img
  • 今日头条号:编程界的小学生

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 二十几岁面对生活,骄傲的我怎么会认输呢?
    Efasit润萍阅读 1,027评论 0 1
  • 我的小Lana 爸爸相信你定是个美丽的小女孩 有着你妈妈大大的眼睛 和她可爱的小嘴 我的小Lana 不知你可曾听到...
    LOYOL阅读 2,682评论 0 0
  • ha ru du du e l l l
    彼时风光阅读 1,124评论 0 0