java算法之二分查找法的实例详解

 更新时间:2017年08月10日 08:38:07   作者:aspook  
这篇文章主要介绍了java算法之二分查找法的实例详解的相关资料,这里提供简单实例帮助大家学习理解这部分内容,需要的朋友可以参考下

java算法之二分查找法的实例详解

原理

假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1。通过数组长度可取出中间位置元素的索引,将其值与目标值比较,如果中间位置元素值大于目标值,则在左部分进行查找,如果中间位置值小于目标值,则在右部分进行查找,如此循环,直到结束。二分查找算法之所以快是因为它没有遍历数组的每个元素,而仅仅是查找部分元素就能找到目标或确定其不存在,当然前提是查找范围为有序数组。

Java的简单实现

package me.geed.algorithms; 
 
public class BinarySearch { 
 
  /** 
   * 从一个有序数组(如升序)中找到值为key元素 
   * @param key 
   * @param array 
   * @return 如果找到目标元素,则返回其在数组中的索引,否则返回-1 
   */ 
  public static int find(int key, int[] array){ 
    int low = 0; 
    int high = array.length - 1; 
    while (low <= high) { 
      int mid = low + (high - low) / 2; 
      if (array[mid] > key) { 
        high = mid - 1; 
      } else if (array[mid] < key) { 
        low = mid + 1; 
      } else { 
        return mid; 
      }       
    } 
    return -1;    
  } 
   
  public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    int[] array = {2, 3, 5, 9, 10, 13, 23, 45, 78, 89, 100, 128, 256}; 
    System.out.println("目标元素索引值:" + BinarySearch.find(9, array));     
    System.out.println("目标元素索引值:" + BinarySearch.find(26, array)); 
  } 
 
} 

输出结果为:

目标元素索引值:3 
目标元素索引值:-1 

二分查找算法的时间复杂度

假设范围数组长度为N,则二分查找的时间复杂度为O(logN)

以上就是java算法中二分查找的实例详解,如有疑问请留言或到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Java实现简单的弹球游戏

    Java实现简单的弹球游戏

    这篇文章主要为大家详细介绍了Java实现简单的弹球游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • java如何获取本机IP地址

    java如何获取本机IP地址

    这篇文章主要为大家详细介绍了java如何获取本机IP地址,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Springboot 多module打包方案示例详解

    Springboot 多module打包方案示例详解

    在使用Springboot进行多模块项目开发时,可能会遇到模块间依赖不存在的问题,本文介绍了两种主要的解决方案,这些方法有助于生成可执行的jar包,并确保模块间正确依赖,适用于多层项目结构中的有效管理和打包,感兴趣的朋友跟随小编一起看看吧
    2023-07-07
  • 使用ftpClient下载ftp上所有文件解析

    使用ftpClient下载ftp上所有文件解析

    最近项目需要写个小功能,需求就是实时下载ftp指定文件夹下的所有文件(包括子目录)到本地文件夹中,保留文件到目录路径不变。今天小编给大家分享使用ftpClient下载ftp上所有文件的方法,需要的的朋友参考下吧
    2017-04-04
  • Java21新特性Record Patterns示例详解

    Java21新特性Record Patterns示例详解

    这篇文章主要为大家介绍了Java21新特性Record Patterns示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Java Spring使用hutool的HttpRequest发送请求的几种方式

    Java Spring使用hutool的HttpRequest发送请求的几种方式

    文章介绍了Hutool库中用于发送HTTP请求的工具,包括添加依赖、发送GET和POST请求的方法,以及GET请求的不同参数传递方式,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • 小议Java中final关键字使用时的注意点

    小议Java中final关键字使用时的注意点

    final关键字代表着最后、不可改变,无论是在用final修饰类、修饰方法还是修饰变量时,都要注意内存分配的问题.这里来小议Java中final关键字使用时的注意点:
    2016-06-06
  • 解析ConcurrentHashMap: get、remove方法分析

    解析ConcurrentHashMap: get、remove方法分析

    ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。Segment的结构和HashMap类似,是一种数组和链表结构,今天给大家普及java面试常见问题---ConcurrentHashMap知识,一起看看吧
    2021-06-06
  • IDEA的run maven方式启动步骤详解

    IDEA的run maven方式启动步骤详解

    这篇文章主要介绍了IDEA的run maven方式启动步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 千万别这样使用Arrays.asList详解

    千万别这样使用Arrays.asList详解

    这篇文章主要给大家介绍了关于为什么说千万别这样使用Arrays.asList()的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06

最新评论