二分查找(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;
  }
}


目录
相关文章
|
11天前
|
Java
java实现二分查找
java实现二分查找
13 0
|
1月前
|
Java 程序员 编译器
【详识JAVA语言】面向对象程序三大特性之二:继承
【详识JAVA语言】面向对象程序三大特性之二:继承
47 2
|
25天前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
1天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
1天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
27 10
|
6天前
|
Java Android开发 C++
Kotlin vs Java:选择最佳语言进行安卓开发
【4月更文挑战第13天】Java曾是安卓开发的主流语言,但Kotlin的崛起改变了这一局面。Google在2017年支持Kotlin,引发两者优劣讨论。Java以其成熟稳定、强大生态和跨平台能力占优,但代码冗长、开发效率低和语言特性过时是短板。Kotlin则以简洁语法、空安全设计和高度兼容Java脱颖而出,但社区和生态系统仍在发展中,可能存在学习曲线和性能问题。选择语言应考虑项目需求、团队熟悉度、维护性、性能和生态系统。无论选择哪种,理解其差异并适应新技术至关重要。
|
17天前
|
Java
Java语言打印九九乘法表(详解)
Java语言打印九九乘法表(详解)
15 1
Java语言打印九九乘法表(详解)
|
25天前
|
Java API 开发工具
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(三)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
30 0
|
25天前
|
Java 数据处理 数据库
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(二)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
34 0
|
25天前
|
存储 算法 Java
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(一)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
33 0