17-二分查找

*

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class BinarySearch {
/*
    二分查找原理:
        顾名思义,就是在一个数组中查找一个特定的值
        二分查找可以在每次查找后,减少一半的查找量

        但是二分查找有个前提就是数组必须是先排序好的。
 */

    public static void main(String[] args) {
        // 随机生成(1-100)的指定长度的数组
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入指定的数组长度:");
        int[] arr = randomArr(scanner.nextInt());
        System.out.println("源数组: arr = " + Arrays.toString(arr));

        System.out.print("请输入要查找的元素:");
        int key = scanner.nextInt();
        int index = binarySearch(arr, key);
        if (index != -1) {
            System.out.println(key + "值在数组中的索引为:" + index);
        }
        else {
            System.out.println("数组中不存在" + key + "元素!");
        }
    }

    private static int binarySearch(int[] arr, int key) {
        // 定义小索引min,和大索引max
        int min = 0;
        int max = arr.length - 1;
        // 循环查找
        while (min  arr[middle]) {
                min = middle + 1;
            }else {
                return middle;
            }
        }
        return -1;
    }

    private static int[] randomArr(int length) {
        Random random = new Random();
        System.out.print("请输入数组的长度:");
        int[] arr = new int[length];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = random.nextInt(101) + 1;
        }
        Arrays.sort(arr);
        return arr;
    }
}

Original: https://www.cnblogs.com/OnlyOnYourself-lzw/p/16567734.html
Author: OnlyOnYourself-Lzw
Title: 17-二分查找

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/619803/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【黄啊码】linux利用lvs+Keepalived实现负载均衡

    负载均衡:两台(一主一备) LVS + Keepalived+三台HTTP服务器 这是我的第一台HTTP服务器【这里使用的是现成lnmp,然后复制出三台一模一样的】 在每台(HTT…

    数据库 2023年6月16日
    0111
  • 记一次MySql唯一索引在left join连表查询没走索引的问题

    在新建一张账单结算信息表bill_settlement_info的时候,建立的唯一索引uk_bill_no(bill_no,tenant_id)。由于列表查询用到该表的字段。所以在…

    数据库 2023年6月16日
    091
  • SQL语言的总结

    SQL语言分类:1.数据查询语言(DQL:Data Query Language),也称为”数据检索语句”,用以从表中查询获得数据,常用关键字SELECT …

    数据库 2023年6月16日
    0100
  • jdbc-对其中三步的封装

    package com.cqust.utils; import java.sql.*; public class JDBCUtil {static {try {//注册驱动类加载的…

    数据库 2023年6月11日
    087
  • Java常用类解析

    包装类 包装类值基本数据类型对应的引用类型,包装类封装好的方法能够很方便的让我们操作基本数据类型而不需要自己再去编写不必要的代码。 基本数据类型 包装类 boolean Boole…

    数据库 2023年6月16日
    084
  • go test 的内联问题

    写单测的时候遇到一个问题,在使用 gomonkey 进行打桩时,使用 gland 的 debug 运行测试时,测试程序正常跑通,而使用 run 或者命令行运行 go test -v…

    数据库 2023年6月9日
    0136
  • URL解码时,为什么将加号解码为空?

    以下代码在.NET Framework 2.0 中测试。 先看一个例子: test.aspx页面: 当参数 parameters 输出到页面后,值已经不为”A+B&#8…

    数据库 2023年6月11日
    069
  • ReentrantLock可重入、可打断、Condition原理剖析

    本文紧接上文的AQS源码,如果对于ReentrantLock没有基础可以先阅读我的上一篇文章学习ReentrantLock的源码 重入加锁其实就是将AQS的state进行加一操作 …

    数据库 2023年6月11日
    092
  • 【黄啊码】教你用python画冰墩墩

    python;gutter:true; import turtle</p> <p>turtle.title('PythonBingDwenDwen…

    数据库 2023年6月16日
    080
  • Golang 接口(interface)

    Go 语言的接口遵守LSP(里氏替换原则),即 一个类型可以自由地被另一个满足相同接口的类型替换。 接口类型具体描述了一系列方法的集合,一个实现了这些方法的具体类型是这个接口类型的…

    数据库 2023年6月16日
    084
  • MYSQL–>SQL优化

    Insert优化 优化原因:MYSQL数据库中insert每执行一次都会对数据库进行一次连接,会浪费很大资源。 优化方案: 批量插入 插入数据的时候尽量一次性批量插入多个数据而不是…

    数据库 2023年6月14日
    0100
  • Java8Stream流

    Stream流呢,以前我也有所了解,像一些面试题中也出现过,Java8的新特性,有一块就是这个Stream操作集合,而且在看一些项目中也使用的比较多。但总感觉自己学的一知半解,所以…

    数据库 2023年6月11日
    095
  • 计算机中内存、cache和寄存器之间的关系及区别

    寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。…

    数据库 2023年6月11日
    0111
  • 百度云服务器环境搭建——安装JDK环境、TomCat服务器、MySQL数据库

    百度云服务器环境搭建——安装JDK环境、TomCat服务器、MySQL数据库 1.JDK安装 以JDK1.8为例 首先查看是否安装过jdk ,通过VS code连接云服务器 jav…

    数据库 2023年6月16日
    0119
  • 程序员“迷惑代码”大赏

    谈到程序员,对于外行人来说一贯的印象就是格子衫大裤衩外加人字拖,蓬头(秃头)垢面黑眼圈,还有就是”人傻钱多死得快”🤣,这是外界对程序员固有的思想,但是作为新…

    数据库 2023年6月11日
    0103
  • Javascript中“==”与“===”的区别

    在Javascript中有”==”和”===”两种比较运行符,那么他们有什么区别呢? 一、对于string,number等基础类型,…

    数据库 2023年6月9日
    0105
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球