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++;
}
}
}
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++;
}
}
}