二分查找(Java语言)非递归

简介: 二分查找(Java语言)非递归

二分查找

  • 二分查找是基于有序序列的查找方法,一开始令【low - high】为整个序列的下标区间,然后每次测试当前【low - high】的中间位置mid=(low + high )/ 2,判断arr【mid】与查找值的大小。
  • 二分查找的高效之处在于,每一步都可以去除当前区间中的一半元素,因此时间复杂度是O(logn),这是十分优秀的。

设计思想:

  • 二分查找法实质上是不断地将有序数据集进行对半分割,并检查每个分区的中间元素。在以下介绍的实现方法中,有序数据集存放在arr数组中,参数key是要查找的数据。
  • 此实现过程的实施是通过变量low和high控制一个循环来查找元素(其中low和high是正在查找的数据集的两个边界值)。
  • 首先,将low和high分别设置为0和arr.length-1。在循环的每次迭代过程中,将mid设置为low和high之间区域的中间值。
  • 如果处于mid的元素比目标值小,将左索引值移动到mid后的一个元素的位置上,即将low=mid+1。即下一组要搜索的区域是当前数据集的上半区。
  • 如果处于mid的元素比目标元素大,将右索引值移动到mid前一个元素的位置上,即将high=mid-1。即下一组要搜索的区域是当前数据集的下半区。
  • 随着搜索的不断进行,low从左向右移,high从右向左移。一旦在mid处找到目标,查找将停止
  • 如果没有找到目标,low和high将重合,退出,返回-1。

/**
 *作者:魏宝航
 *2020年11月29日,下午13:27
 */
import java.util.*;
public class Test{
  public static void main(String[] args) {
    int[] arr=new int[100];
    for(int i=1;i<=100;i++) {
      arr[i-1]=i;
    }
    Arrays.sort(arr);
    int key=37;
    if(binarySearch(arr, key)==-1) {
      System.out.println("该值不存在");
    }
    else {
      System.out.println("该值对应的下标为:"+binarySearch(arr, key));
    }
  }
  public static int binarySearch(int[] arr,int key) {
    int low=0;
    int high=arr.length-1;
    while(low<=high) {
      int mid=(low+high)/2;
      if(key<arr[mid]) {
        high=mid-1;
      }
      else if(key>arr[mid]) {
        low=mid+1;
      }
      else {
        return mid;
      }
    }
    return -1;
  }
}


目录
相关文章
|
2月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
90 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
24天前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
4月前
|
Java Maven
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
该博客文章介绍了如何使用Java Swing中的JFrame创建一个窗体来收集用户输入的内容,并提供了详细的实现步骤和完整代码示例。
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
|
1月前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
49 4
|
2月前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
56 3
|
2月前
|
移动开发 Java 大数据
深入探索Java语言的核心优势与现代应用实践
【10月更文挑战第10天】深入探索Java语言的核心优势与现代应用实践
86 4
|
2月前
|
Java
在 Java 中实现二分查找法
【10月更文挑战第9天】
34 1
|
3月前
|
Java
java基础(11)函数重载以及函数递归求和
Java支持函数重载,即在同一个类中可以声明多个同名方法,只要它们的参数类型和个数不同。函数重载与修饰符、返回值无关,但与参数的类型、个数、顺序有关。此外,文中还展示了如何使用递归方法`sum`来计算两个数之间的和,递归的终止条件是当第一个参数大于第二个参数时。
34 1
java基础(11)函数重载以及函数递归求和
|
2月前
|
算法 Java
java冒泡排序与二分查找(详解)
java冒泡排序与二分查找(详解)
42 4
|
2月前
|
存储 Java 数据安全/隐私保护
Java中的域,什么是域?计算机语言中的域是什么?(有代码实例)
文章解释了Java中域的概念,包括实例域、静态域、常量域和局部域,以及它们的特点和使用场景。
70 2