• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

奋斗的软件工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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

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

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

点击查看代码
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);
        }
    }
}

posted on 2024-01-29 13:07  周政然  阅读(46)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3