JavaSE——算法(2/2):查找算法-二分查找(前言、详细图解、代码部分)

简介: JavaSE——算法(2/2):查找算法-二分查找(前言、详细图解、代码部分)

前言

查找算法中,首要讨论的是基本查找,也就是顺序查找,在数据量特别大的时候,基本查找这种从前往后挨个找的形式,性能是很差的!


所以为了提高一些性能,产生了各种查找算法。这里要学习介绍的是二分查找,也叫折半查找。


二分查找有一个前提条件和一个核心思想:


  • 前提条件:数组中的数据必须是有序的
  • 核心思想:每次排除一半的数据,查询数据的性能明显提高许多!

假设有一个有序数组, { 7,2,79,81,103,127,131,147}

我们用图解来推演一下是如何进行查找的:

详细图解

以查找131为例:

(此处的right 坐左朝右;left 坐右朝左。不要模仿doge)

注意:二分查找正常的折半条件应该是开始位置let<=结束位置right!

代码部分

package user.Arithmetic;
 
public class BinarySearch {
    public static void main(String[] args) {
        //1.准好好一个数组
        int[] arr = { 7,2,79,81,103,127,131,147};
        System.out.println(myBinarySearch(arr,131));
    }
    public static int myBinarySearch(int[] arr,int data){
        //1.定义两个变量,一个在初始位置,另一个在末尾位置
        int left = 0;
        int right = arr.length - 1;
 
        //2.定义一个循环控制折半
        while(left <= right){
            //3.每次折半,都要算出中间位置处的索引
            int middle = (left + right) / 2;
            //4.判断当前要找的元素值,与中间位置处的元素值的大小
            if(data < arr[middle]){
                //往左边找,右边的索引改为: 中间索引 - 1
                right = middle - 1;
            }else if(data > arr[middle]){
                //往右边找,左边的索引改为: 中间索引 + 1
                left = middle + 1;
            }else{
                //中间位置处的元素值,正好等于我们要找的元素值
                return middle;
            }
        }
        return -1;
    }
}

运行结果:


END



目录
相关文章
|
19天前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
126 26
|
19天前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
|
16天前
|
机器学习/深度学习 人工智能 搜索推荐
从零构建短视频推荐系统:双塔算法架构解析与代码实现
短视频推荐看似“读心”,实则依赖双塔推荐系统:用户塔与物品塔分别将行为与内容编码为向量,通过相似度匹配实现精准推送。本文解析其架构原理、技术实现与工程挑战,揭秘抖音等平台如何用AI抓住你的注意力。
257 7
从零构建短视频推荐系统:双塔算法架构解析与代码实现
|
19天前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
137 14
|
15天前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
|
15天前
|
canal 算法 vr&ar
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
|
19天前
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
104 1
|
15天前
|
机器学习/深度学习 存储 算法
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
|
15天前
|
机器学习/深度学习 分布式计算 算法
【风场景生成与削减】【m-ISODATA、kmean、HAC】无监督聚类算法,用于捕获电力系统中风场景生成与削减研究(Matlab代码实现)
【风场景生成与削减】【m-ISODATA、kmean、HAC】无监督聚类算法,用于捕获电力系统中风场景生成与削减研究(Matlab代码实现)
100 0
|
15天前
|
存储 边缘计算 算法
【太阳能学报EI复现】基于粒子群优化算法的风-水电联合优化运行分析(Matlab代码实现)
【太阳能学报EI复现】基于粒子群优化算法的风-水电联合优化运行分析(Matlab代码实现)

热门文章

最新文章