public class SequenceSearch02 {
public static void main(String[] args) {
/* 请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,
输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。*/
/*思路分析:
* 当数组个数为奇数时:
* 1.先定义一个数组 int[] nums={1,8, 10,33, 89, 1000, 1234}
* 2.定义 下标low:0,上标height:6 middle指针为:(low+middle)/2
* 3.定义 要查找的数为x=29
* 第一轮:low:0,上标:6 middle:(low+middle)/2为下标[3]的数=33 因为:x<33 所以范围向下半区缩小 low:0,height:middle-1=[2]=10 middle=[1]=8
* 第二轮:low:0,height:middle-1=[2]=10 middle=[1]=8 因为:x>middle 所以范围向上半区缩小 low=middle+1=[2]=10 h[2]=10 middle=[2]=10
* 第三轮:x>middle 所以low=middle+1=[3]=89 low大于height 退出循环
*
* 当数组个数为偶数时:{1,8, 10, 89, 1000, 1234} x=1234
* 1.先定义一个数组 int[] nums={1,8,10,89,1000,1234}
* 2.定义 下标low:[0],上标height:[5] middle指针为:(low+middle)/2=[2]=10
* 3.第一轮:进行判断 因为x>middle 所以low=middle+1=[3]=89 上标height:[5] middle=[4]=1000
* 第二轮:进行判断 因为x>middle[4] 所以low=middle+1=[5]=1234 middle=(5+5)/2=[5]=1234
* 第三轮:进行判断 因为x=middle break
* */
int[] nums={1,8,10,89,1000,1234};
int low=0;
int height=nums.length-1;
int middle=(low+height)/2;
int x = 1234;
int temp=0;
int count=0;
// 遍历数组
while(low <= height){
count++;
if (x == nums[middle]){
System.out.println("查找值为:"+x+"的数"+"\n已在数组中找到该数,值为:"+nums[middle]+"下标为:"+middle);
temp = 1;
break;
} else if (x > nums[middle]){
low = middle + 1;
middle=(low+height)/2;
}
else {
height = middle - 1;
middle=(low+height)/2;
}
}
if (temp == 0){
System.out.println("没有查找到该数");
}
System.out.println("共进行了"+count+"次查找");
}
}