JAVA数组通过二分法查找

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


public class BinarySearch {


/**
* @param args
*/
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);//定义一个从控制台输入的变量
int n=sc.nextInt();
int[] arr=new int[n];
for(int i=0;i<n;i++){
arr[i]=(int)(Math.random()*100);//随机生成0-99的整数,赋值给数组
}
//二分法进行查找时,必须对数组进行排序,否则查出的结果不准确
Arrays.sort(arr);//给数组升序排序
int num=sc.nextInt();//从控制台输入要查找的数
//定义3个下标指数
int endIndex=arr.length-1;
int middleIndex=0;
int startIndex=0;
int count=0;//定义一个计数器,当查找次数到达一定次数时,证明查找的数不存在
while(true){
middleIndex=(startIndex+endIndex)/2;//中间数组下标等于开始小标和结尾下标的和的一半
if(num>arr[middleIndex]){
startIndex=middleIndex;
//当数组元素的个数为偶数个时,最后一个元素无法检索到,由于整数的取整是向下取整,所以需要加1才能检索到最后一个元素
if(middleIndex==arr.length-2){
startIndex=middleIndex+1;
}
}else if(num<arr[middleIndex]){//当查找数小于中间数是,结尾下标重新赋值为中间下标
endIndex=middleIndex;
}else{
System.out.println("这个元素已经找到,下标是:"+middleIndex);
break;
}
if(Math.pow(2,count)>arr.length){//查找到一定次数任然未检索到,说明元素不存在,跳出循环
System.out.println("这个数不存在");
break;
}
count++;
}
}


}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值