iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java怎么实现二分法查找
  • 256
分享到

Java怎么实现二分法查找

2023-07-02 18:07:44 256人浏览 泡泡鱼
摘要

这篇文章主要讲解了“Java怎么实现二分法查找”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java怎么实现二分法查找”吧!二分法查找概述二分查找也称折半查找(Binary Search),

这篇文章主要讲解了“Java怎么实现二分法查找”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java怎么实现二分法查找”吧!

二分法查找

概述

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。

但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

归并排序即运用了二分法的思想。首先需要一个由小到大排序好的数组,先对比中间的值,如果比要找的大,则向前找,取中间值前面的一半再找中间值再对比。

如果比要找的小,则向后找,取中间值后面的一半再取中间值再对比。

Java怎么实现二分法查找

递归实现

这里,我使用了递归的方法进行实现。

首先需要确认查找的范围,即有一个左索引和右索引,每次取(left+right)/2为中间值,比较要查找的元素和中间值的大小,若中间值大,则向前找,即递归范围为left ,mid-1。反之向右找,即递归范围mid+1,right。若相等即为找到。

但是需要继续向此索引的前后找找看有没有和其相等的值,一并加入到集合中,最后返回这个集合。

递归实现代码

package search;import java.util.ArrayList;import java.util.List;public class BinarySearch {    public static void main(String[] args) {        int[] array = {1,1,1,2,3,4,5,6,7};        List<Integer> integers = binarySearch(array, 0, array.length - 1, 1);//        for (Integer integer : integers) {//            System.out.print(integer+ " ");//        }        System.out.println(integers);    }    public static List<Integer> binarySearch(int[] array, int left, int right, int value){        //如果左索引大于右索引,则说明全部遍历完了,也没有找到相应的值,返回空集合即可        if (left>right){            return new ArrayList<Integer>();        }        //获取中间值的下标(二分)        int mid = (left+right)/2;        //如果要找的值比中间值小,则继续向左找        if (value < array[mid]){            return binarySearch(array, left, mid-1, value);        //要找的值比中间值小大,则向右找        }else if (value > array[mid]){            return binarySearch(array, mid+1, right, value);        //否则,说明相等,找到了        }else {            //找到一个,还需要向左右找找看有没有相同的值            List<Integer> resultList = new ArrayList();            //向左循环找,如果有,则加入到集合中            int temp = mid - 1;            while (temp>=0 && array[temp] == value){                resultList.add(temp);                temp -= 1;            }            //向右循环找,如果有,则加入到集合中            temp = mid + 1;            while (temp < array.length && array[temp] == value){                resultList.add(temp);                temp += 1;            }            //将一开始找到的那个索引页加入到集合中。            resultList.add(mid);            return resultList;        }    }        //以下这段代码来自百度百科,供大家参考。    public static int binarySearch(Integer[] srcArray, int des) {        //定义初始最小、最大索引        int start = 0;        int end = srcArray.length - 1;        //确保不会出现重复查找,越界        while (start <= end) {            //计算出中间索引值            int middle = (end + start)>>>1 ;//防止溢出            if (des == srcArray[middle]) {                return middle;                //判断下限            } else if (des < srcArray[middle]) {                end = middle - 1;                //判断上限            } else {                start = middle + 1;            }        }        //若没有,则返回-1        return -1;    }}

循环实现代码(非递归)

package search;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class BinarySearch3 {    public static void main(String[] args) {        int[] array = {1,1,1,1,1,2,3,4,5,6,7};        System.out.println(BinarySearch3.binarySearch(array, 7));    }    public static List<Integer> binarySearch(int[] array, int key){        List<Integer> resultList = new ArrayList<>();        int start = 0;        int end = array.length - 1;        while (start <= end){            int mid = (start + end) / 2;            int midValue = array[mid];            if (key > midValue){                //key比中间值大。向右找                start = mid + 1;            } else if (key < midValue){                //key比中间值小。向左找                end = mid - 1;            } else {                //否则就找到了                //先向左找有没有相同值                int temp = mid -1;                while (temp >= start && array[temp] == key){                    resultList.add(temp);                    temp -= 1;                }                //将一开始找到的加入结果集                resultList.add(mid);                //再向右找找有没有相同值                temp = mid + 1;                while (temp <= end && array[temp] == key){                    resultList.add(temp);                    temp += 1;                }                break;            }        }        return resultList;    }}

二分法查找(递归、循环)

public class BinarySearch {        //循环        private static int binarySearchByCycle(int[] arr,int num) {        int start = 0;        int end = arr.length - 1;        while (start <= end){            int mid = (start + end) / 2;            if(num == arr[mid]){                return mid;            }else if(num > arr[mid]){                start = mid + 1;            }else {                end = mid - 1;            }        }        return -1;    }    //递归        private static int binarySearchByRecursion(int[] arr,int num,int start,int end) {        int mid = (start + end) / 2;        if(num == arr[mid]){            return mid;        }else if(num > arr[mid]){            start = mid + 1;        }else {            end = mid - 1;        }        if(start <= end){            mid = binarySearchByRecursion(arr,num,start,end);  //递归继续寻找        }else {            mid = -1;        }        return mid;    }}

感谢各位的阅读,以上就是“Java怎么实现二分法查找”的内容了,经过本文的学习后,相信大家对Java怎么实现二分法查找这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Java怎么实现二分法查找

本文链接: https://www.lsjlt.com/news/343608.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java怎么实现二分法查找
    这篇文章主要讲解了“Java怎么实现二分法查找”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java怎么实现二分法查找”吧!二分法查找概述二分查找也称折半查找(Binary Search),...
    99+
    2023-07-02
  • java如何实现二分法查找
    小编给大家分享一下java如何实现二分法查找,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!二分法查找//前提必须是在有序的条件下...
    99+
    2024-04-02
  • php二分查找算法怎么实现
    PHP实现二分查找算法的步骤如下: 确定要查找的数组和目标值。 定义一个函数,传入查找的数组、目标值以及数组的起始位置和结束位置作...
    99+
    2024-03-15
    php
  • Java怎么实现二分查找的变种
    小编给大家分享一下Java怎么实现二分查找的变种,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于...
    99+
    2023-05-30
    java 二分查找
  • php怎么实现二分查找
    这篇文章主要介绍了php怎么实现二分查找,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php实现二分查找的方法:首先以数组中某个值为界;然后再递归进行查找,直到结束,代码为【...
    99+
    2023-06-06
  • 快速查找与二分查找算法如何在Java中实现
    这期内容当中小编将会给大家带来有关快速查找与二分查找算法如何在Java中实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 快速查找:这个是相当简单的,以数组举例,就用一个for循环去查找数组中需要查...
    99+
    2023-05-31
    java 快速查找 二分查找
  • Python语言实现二分法查找
    前言: 二分法也就是二分查找,它是一种效率较高的查找方法 假如公司新来了一个人,叫张三,他是你们公司第47个人,过了一段时间后,有些人呢看张三不爽,离职了,那这时候张三肯定不是公司第...
    99+
    2024-04-02
  • Java二分查找算法实例详解
    在本文中,我们将介绍二进制搜索相对于简单线性搜索的优势,并介绍它在 Java 中的实现。 1. 需要有效的搜索 假设我们在wine-selling业务和数以百万计的买家每天都访问我们...
    99+
    2022-11-13
    Java 二分查找算法
  • 关于二分法查找Java的实现及解析
    目录二分法查找概述递归实现递归实现代码循环实现代码(非递归)二分法查找(递归、循环)二分法查找 概述 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。...
    99+
    2024-04-02
  • 怎么在php中实现二分查找
    本篇文章给大家分享的是有关怎么在php中实现二分查找,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混...
    99+
    2023-06-14
  • 怎么在java中利用二分查找实现迭代
    怎么在java中利用二分查找实现迭代?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统...
    99+
    2023-06-14
  • 怎么在java中利用递归实现二分查找
    本篇文章给大家分享的是有关怎么在java中利用递归实现二分查找,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java有哪些集合类Java中的集合主要分为四类:1、List列表:...
    99+
    2023-06-14
  • Java实现查找算法的示例代码(二分查找、插值查找、斐波那契查找)
    目录1.查找概述2.顺序查找3.二分查找3.1 二分查找概述3.2 二分查找实现4.插值查找4.1 插值查找概述4.2 插值查找实现5.斐波那契查找5.1 斐波那契查找概述5.2 斐...
    99+
    2024-04-02
  • java 中二分法查找的应用实例
    java 中二分法查找的应用实例二分查找的前提是:数组有序 注意:mid的动态变化,否则出错!!!  实例代码:public class BiSearch { public static void main(St...
    99+
    2023-05-31
    java 二分法 ava
  • 利用Java人实现一个二分法查找功能
    这期内容当中小编将会给大家带来有关利用Java人实现一个二分法查找功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。算法假如有一组数为3,12,24,36,55,68,75,88要查给定的值24.可设三个...
    99+
    2023-05-31
    java 二分法查找
  • 两种java实现二分查找的方式
    目录1、二分查找算法思想2、二分查找图示说明3、二分查找优缺点3、java代码实现3.1 使用递归实现 3.1 不使用递归实现(while循环) 3.3 测试4、时间复杂度5、空间复...
    99+
    2024-04-02
  • Java怎么实现二叉查找树的增删查
    本篇内容介绍了“Java怎么实现二叉查找树的增删查”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!定义二叉查找树(ADT)是一个具有对于树种的...
    99+
    2023-07-02
  • python二分查找法
    1、条件不是所有数据类型都可以应用二分查找法,他需要满足以下的条件:是一个有序序列(索引数组),且是已经排好序的序列.2、查找原理在一个有序序列中查找一个指定的数,如果首先和这个序列的中间数相比如果相等就找到返回,如果比这个中间数小,即在...
    99+
    2023-01-31
    python
  • java算法之二分查找法的实例详解
    java算法之二分查找法的实例详解原理假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1。通过数组长度可取出中间位置元素的索引,将其值与目标值比较,如果中间位置元素值大于目标值,则...
    99+
    2023-05-31
    java 算法 二分查找法
  • 用C语言实现二分查找算法
    目录一.前言二.二分查找法1.什么是二分查找法2.如何用c语言来实现二分查找法三.总结总结一.前言 假如今天我们需要在一个有序的数组中来寻找一个数的下标,就用"1,2,3,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作