package day1_test;
import java.util.Scanner;
public class Dmon3 {
public static void main(String[] args) {
// 练习二分查找法
int [] a= {38,43,5,536,43453,24,45,6,2};
int temp;
for(int i = 0;i<a.length;i++) {//这是表示轮数
for(int j =0;j<a.length-i-1;j++) {//内层循环表示每一轮要进行几次比较
if(a[j]>a[j+1]) {//判断交换条件
temp =a[j];
a[j]=a[j+1];
a[j+1]=temp;//二分查找先需要一个有序的数组用之前的冒泡排序排好了
}
}
}
for(int i=0;i<a.length-1;i++)
System.out.print(a[i]+" ");//到这里只是建立了一个有序的数组
int maxNum = a.length-1,minNum = 0, centre = (maxNum+minNum)/2;//确立查找范围
int count=1;//建立一个判断变量判断是否输出是数组中的第几个值
System.out.println("piease input number");//提示信息
Scanner input=new Scanner(System.in);//用户输入想查找的数字
int Number =input.nextInt();
while(true) {//这里用while循环是因为我们并不知道查找次数
if(a[centre]>Number) {
maxNum=centre -1;//当要查的数字小于中间数时让最大数的范围变成中间数前一个因为中间数已经比较过了所以是前一个
}
else if(a[centre]<Number) {
minNum=centre+1;//同理
}
else {
break;//当只有最大值和最小值相等时跳出循环中间数是我们要找的数
}
centre = (maxNum+minNum)/2;//如果没有找到则变换为新范围的中间值
if(maxNum<minNum) {
System.out.println("数字不存在");//当最大值跳到最小值后面时说明全部查完后也没有找到
count=-1;//用于判断下面的是否输出
break;
}
}
if(count!=-1);//
System.out.println("你输入的数字是第"+(centre+1)+"个");
}
}