折半算法(二分法)只能应用在有序数组中!从大到小或者从小到大(从左到右哈哈)
int array[] = {1,3,5,7,9,10,12,14,15};
int left = 0;
int right = array.length-1; //最右端的下标为总长度-1
int middle; //中间下标
int sum = 12; //要查找的数字
int index = array.length; //记录器 //这里定义一个记录器是为了下面还可以继续引用
//因为是记录下标的,所以范围不能是0~数组长度之间,可以是负数 也可以是大于等于数组长度的
while(left<=right){
middle = (left+right)/2 ; //中间部分的位置,是当前左右两端加起来/2,每次循环都重新定义一次
if(sum == array[middle]){
index = middle; //记录当前下标
break; //已经找到,就结束循环。也可以直接在这里输入语句
} else if(sum > array[middle]){
left = middle +1; //如果大于说明在右半部分,砍掉左半部
}else if (sum < array[middle]){
right = middle -1; //其实-1 +1 无所谓 只是少算一个边,提高一点效率
}
}
if(index != array.length){ //既然不等于原先的数字,那就说明他进入过if,已经被下标赋值了
System.out.println(sum+"的下标是"+index);
}else{
System.out.println("您输入的数字不存在,请重试");
}