美文网首页
二分法查找

二分法查找

作者: Android_开发工程师 | 来源:发表于2020-04-10 20:52 被阅读0次

二分法查找 :

目的 :

查找一个数组中是否含义某个元素 : 有返回数组中的位置 ,没有返回 -1

算法:

二分法查找适用于数据量较大时,但是数据需要先排好顺序。
算法核心思想:
二分法适用于已经排好序的数组,定义两个数组位置变量,一个low(下标为0),一个high(数组最后一位下标), 则mid=(low+high)/2

取一个数组中间位置元素的值 ,与查找的值进行大小比较 :

如果 value==arr[mid],中间值正好等于要查找的值,则返回下标,return mid;
如果 value<arr[mid],要找的值小于中间的值,则再往数组的小端找(中间位置左边,数组最后一位 =>),high=mid-1;
如果 value>arr[mid],要找的值大于中间的值,则再往数组的大端找(中间位置右边,数组首位 =>),low=mid+1;

二分法查找缺点:

1、数组必须是有序的数组。 (无顺序 ,先排序 -- 需要考虑排序的效率问题)

二分法查找的优点:

1、查找次数少,效率高。

上代码 :

package com.big.company;

import java.util.Arrays;

public class binarySearch {

    public static void main(String[] args) {

        int[] arr = {1, 3, 7, 88, 30, 20, 50, 10, 80, 9, 7, 12, 100, 40, 8};
        Arrays.sort(arr); // 先排序
        System.out.println(Arrays.toString(arr));
        System.out.println("返回位置下标 :" + myBinarySearch(arr, 8));
    }

    public static int myBinarySearch(int[] arr, int value) {
        int low = 0; // 数组起点
        int high = arr.length - 1; // 数组终点下标

        // 不断循环 ,直到不满足条件
        while (low <= high) {
            // 数组中间点下标
            int mid = (low + high) / 2; 
            // 也许中间位置对应的值就是我们要找到值,优先判断一下
            if (value == arr[mid]) { 
                return mid;
            }
            // 要查找的值,在数组中心点的右边,数组起点更新为中心点的右边一位
            if (value > arr[mid]) {
                low = mid + 1;
            }
            // 要查找的值,在数组中心点的左边 ,数组终点下标更新为中心点左边一位
            if (value < arr[mid]) {
                high = mid - 1;
            }
        }
        return -1;//没有找到返回-1
    }
}

Arrays 类中已经为我们实现 :
Arrays 类中还有许多帮助方法(such as sorting and searching ),大家可以查看一下源码

    // Like public version, but without range checks.
    private static int binarySearch0(long[] a, int fromIndex, int toIndex,
                                     long key) {
        int low = fromIndex;
        int high = toIndex - 1;

        while (low <= high) {
            int mid = (low + high) >>> 1;
            long midVal = a[mid];

            if (midVal < key)
                low = mid + 1;
            else if (midVal > key)
                high = mid - 1;
            else
                return mid; // key found
        }
        return -(low + 1);  // key not found.
    }


相关参考: https://blog.csdn.net/lee514/article/details/82977044


如果您能从文字中学到东西,请帮忙点赞 👍 ,😘😘😘 赠人玫瑰,手留余香

致成长之路


相关文章

  • 二分法查找

    二分法基本查找 二分法遍历查找

  • 二分法查找

    二分法查找的前提是数组必须排序!!!二分法查找的前提是数组必须排序!!!二分法查找的前提是数组必须排序!!!二分法...

  • 刷前端面经笔记(九)

    1.JavaScript实现二分法查找? 二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找...

  • 数据结构-递归

    二分法查找

  • 查找算法

    三种查找算法:顺序查找,二分法查找(折半查找),分块查找,散列表

  • 二分查找

    以二分法来提升查找效率 二分法查找到key的合适位置 put get delete 二分查找的查找操作为O(log...

  • 算法和排序

    1、线性查找 2、二分法查找 3、冒泡排序

  • 查找算法

    查找算法 顺序查找法 时间复杂度:O(n) 二分法查找 二分法查找适用于有顺序的序列 时间复杂度:O(n) 核心思...

  • 算法图解1-2/11

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

  • 前端面试之算法二分法

    使用二分法的前提是,目标数组的元素必须是有序排列的,所以二分法属于有序查找算法 二分法又称为“折半查找”,从数组的...

网友评论

      本文标题:二分法查找

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