首页 > 编程语言 >java中二分查找前提必须是升序吗?

java中二分查找前提必须是升序吗?

时间:2024-01-29 13:11:07浏览次数:33  
标签:二分 arr java int System 查找 static 升序

二分查找不必须是升序,降序排列的数组也可以执行二分查找

二分查找算法是一种高效的搜索方法,它要求数据集是有序的,无论是升序还是降序都可以。在升序排列的情况下,算法会将目标值与中间值比较,如果目标值较小,则在左半部分继续查找;如果目标值较大,则在右半部分继续查找。在降序排列的情况下,比较逻辑相反

点击查看代码
package com.itheima.javase;

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

public class Demo {
    public static Random random=new Random();
    public static Scanner scanner=new Scanner(System.in);
    public static void main(String[] args) {
       int[] arr=new int[10];

       initArray(arr);

        System.out.println(Arrays.toString(arr));

        bubbleSort(arr);

        selectSort(arr);

        //Arrays.sort(arr);

        System.out.println(Arrays.toString(arr));

        int num=scanner.nextInt();

        int index=binarySearch(arr,num);

        System.out.println(index);


    }

    private static int binarySearch(int[] arr,int num) {

        int left=0,right=arr.length-1;

        while(left<=right){
            int mid=(left+right)/2;
            if(num>arr[mid])
                right=mid-1;

            else if(num<arr[mid])
                left=mid+1;
            else
                return mid;
        }
        return -1;
    }

    private static void selectSort(int[] arr) {

        for (int i = 0; i < arr.length-1; i++) {
            int maxIndex=i;
            for (int j = i+1; j < arr.length; j++) {
                if(arr[j]>arr[maxIndex])
                    maxIndex=j;
            }
            if(i!=maxIndex){
                int t=arr[i]^arr[maxIndex];
                arr[i]^=t;
                arr[maxIndex]^=t;
            }
        }
        System.out.println(Arrays.toString(arr));
    }

    private static void bubbleSort(int[] arr) {
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length-i-1; j++) {
                if(arr[j]<arr[j+1]){
                    int t=arr[j]^arr[j+1];
                    arr[j]^=t;
                    arr[j+1]^=t;
                }

            }
        }

        System.out.println(Arrays.toString(arr));
    }

    private static void initArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            arr[i]=random.nextInt(100);
        }
    }
}

标签:二分,arr,java,int,System,查找,static,升序
From: https://www.cnblogs.com/iflytek-aiit319102020329/p/17994282

相关文章

  • 【干货】一文掌握JavaScript检查对象空值的N种技巧!
    在开发JavaScript应用程序时,经常需要检查对象是否为空。这是因为在处理和操作对象数据时,我们需要确保对象包含有效的值或属性。以下是一些常见情况,我们需要检查JavaScript对象是否为空:防止空引用错误:当我们尝试访问或使用一个空对象时,可能会导致空引用错误(如TypeError:Cann......
  • 【干货】一文掌握JavaScript检查对象空值的N种技巧!
    在开发JavaScript应用程序时,经常需要检查对象是否为空。这是因为在处理和操作对象数据时,我们需要确保对象包含有效的值或属性。以下是一些常见情况,我们需要检查JavaScript对象是否为空:防止空引用错误:当我们尝试访问或使用一个空对象时,可能会导致空引用错误(如TypeError:Can......
  • 深入浅出Java多线程(二):Java多线程类和接口
    引言大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第二篇内容:Java多线程类和接口。大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!!在现代计算机系统中,多线程技术是提升程序性能、优化资源利用和实现并发处理的重要手段。特别是在Java编程语言中,多线程机......
  • java读取并解析XML文件的方法有哪些?
    XMLStreamReader:1. DOM(DocumentObjectModel)方式:DOM将整个XML文档加载到内存中,形成一颗树状结构,然后通过操作这个树状结构来获取所需要的数据。示例代码如下:importjavax.xml.parsers.*;importorg.w3c.dom.*;publicclassXMLParser{publicstaticvoidmain(Stri......
  • java冒泡排序的三种实现方法
    第一种通过简单的比较相邻的元素,如果他们的顺序是错误的,则交换它们的位置。重复这个步骤,直到没有更多要交换的元素为止。j变量代表未排序数组范围的右边界,j以后的已经排序publicstaticvoidbubble(int[]nums,intj){if(j==0){return;}......
  • 学习笔记推荐:极客时间《Java常见错误100例》
    最近,我有幸接触了一套非常精彩的学习笔记,《Java常见错误100例》。(手册链接在文末!!!)这套学习笔记出自极客时间,对于想要在Java开发领域深耕细作的朋友们来说,它无疑是一个不可多得的宝藏。接下来,我将结合其内容目录中的一些亮点,为大家进行简要介绍。首先,这套学习笔记囊括了Java......
  • Java学习日记 Day14
    算法:①二叉搜索树的最近祖先:我用了二叉树最近祖先的同样的方法,没有考虑二叉树的定义。还是先判断当前节点情况,然后做递归调用,判断左右节点的情况。②二叉搜索树添加节点:这个要明白添加的节点一定在最后,所以只要判断节点数值大小,一直递归调用就好。③二叉搜索树删除节点:删除分几......
  • 每日一道面试题:Java中序列化与反序列化
    写在开头哈喽大家好,在高铁上码字的感觉是真不爽啊,小桌板又拥挤,旁边的小朋友也比较的吵闹,影响思绪,但这丝毫不影响咱学习的劲头!哈哈哈,在这喧哗的车厢中,思考着这样的一个问题,Java中的对象是如何在各个方法,或者网络中流转的呢?通过这个问题便引出了我们今天的主人公:序列化与反序列化!......
  • IBM java的分析工具(ga和ha)学习和整理
    IBMjava的分析工具(ga和ha)学习和整理背景前几天学习了整理了jca工具今天继续学习一下ga工具ga工具主要是分析gclog相关.可以很直观的进行gclog的分析和展示.除了mat之外还有一个比较轻量级的内存dump分析工具ha.想着一起学习和分析一下.ga工具的相关学习下载:https......
  • 用Java语言实现一个观察者模式
    观察者模式(也被称为发布/订阅模式),提供了避免组件之间紧密耦合的另一种方法,它将观察者和被观察的对象分开。在该模式中,一个对象通过添加一个方法(该方法允许另一个对象,即观察者注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者收到消......