JAVA : 折半查找(二分查找、二分法)


折半算法(二分法)只能应用在有序数组中!从大到小或者从小到大从左到右哈哈)

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("您输入的数字不存在,请重试");
}

猜你喜欢

转载自blog.csdn.net/y2418230874/article/details/79763785