美文网首页
1.1 二分查找

1.1 二分查找

作者: yemuyu | 来源:发表于2018-06-15 01:46 被阅读0次
package chapter1;

/**
 * 二分查找
 * 算法思想:大问题切分为小问题,通过与区间中间位置的比较,使得查找范围每次折半.
 * 适用于数据量比较的场景,查询的范围必须是已排序的.
 * 时间复杂度:O(N) = log2(N)
 * **************
 * 0     N/2    N
 * -------------*
 * **************
 * N为数组长度,X为执行次数
 * N/2 = 2^X
 * X = log2(N)
 * @author liufq
 *
 */
public class BinarySearch {

    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};//数组必须是有序的
        System.out.println(bin(arr,1));
        System.out.println(bin(arr,-1));
        System.out.println(bin1(arr,1));
        System.out.println(bin1(arr,-1));
    }
    
    /**
     * 返回查找到的值得索引,如果查找不到返回-1
     * @param arr
     * @param value
     * @return
     */
    public static int bin(int[] arr, int value) {
        int left = 0;//查询区间的左边界
        int right = 0;//查询区间的右边界
        int mid;//边界的中间位置
        while(left!=right) {
            mid = (left+right)/2;
            if(value < arr[mid]) {
                right = mid;
            }else if(value > arr[mid]) {
                left = mid;
            }else {
                return mid;
            }
        }
        return -1;
    }
    
    /**
     * 递归实现
     * @param arr
     * @param value
     * @return
     */
    public static int bin1(int[] arr, int value) {
        return binRecursion(arr, value, 0, arr.length-1);
    }
    
    private static int binRecursion(int[] arr, int value, int left, int right) {
        if(left == right) {
            return -1;
        }
        int mid = (left+right)/2;
        if(value < arr[mid]) {
            return binRecursion(arr, value, left, mid);
        }else if(value > arr[mid]) {
            return binRecursion(arr, value, mid, right);
        }else {
            return mid;
        }
    }
}

相关文章

  • 算法图解系列之二分查找[01]

    1.1 二分查找 1.2 二分查找的运行时间 1.3 大O表示法 1.4 总结

  • 1.1 二分查找

  • 算法图解1-2/11

    原书作者 Aditya Bhargava 1 算法简介 1.1 二分法查找 二分法查找,正是猜数字游戏的玩法:A...

  • alg4th-1.1

    [TOC] algorithm 4th笔记(1.1) 二分查找 前提:数组有序BinarySearch.java ...

  • 二分查找及其变种

    一、 二分查找 如无特殊说明,本文中所有用到的待查数组均为从小到大顺序。 1.1 无重复元素的二分查找 实现C++...

  • python二分查找算法

    文章概述 二分查找法介绍 简单查找与二分查找对比 二分查找  二分查找算法主要思想:在有序列表中查找指定元素,先从...

  • 算法 - 1

    1. 快速排序1.1 学习分而治之1.2 快速排序的Demo方法1.3 快速排序的图解 2. 二分查找2.1 二分...

  • 数据结构和算法--二分查找

    二分查找 二分查找的思想 二分查找(Binary Search)算法,也叫折半查找算法。 二分查找针对的是一个有序...

  • 这份从阿里大神手中得到的java算法资料!千万别错过!

    1. JAVA 算法 1.1. 二分查找 又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,...

  • Mysql-基础篇(2)-索引原理

    目录: 1、索引1.1、索引图解1.2、索引类型 2、索引存储模型推演2.1. 二分查找2.2. 二叉查找树(BS...

网友评论

      本文标题:1.1 二分查找

      本文链接:https://www.haomeiwen.com/subject/ljxpeftx.html