public class Erfen {
// 不用递归的二分法
public static int bbb(int[] arr,int key ){
int left = 0;//定义左值
int right = arr.length -1;//定义右值
if (left >=right) {//当左值大于右值提示报错
return -1;
}
while (left <= right) {
int a = (left + right)/2;//取中间值
if(key == arr[a])//等于特定元素返回下标
return a;
if(key >=arr[a])//大于左值等于中间值加1(加1因为中间值已经比较过了)
left = a + 1;
else否则右值等于中间值减1
right = a - 1;
}
return -1;//运行完啦还没有找到这个数就报错。
}
// 使用递归的二分法
public static int aaa(int[] arr,int left,int right,int key ){
if (key>arr[right]||key<arr[left]||right<left) {//满足这些情况就报错
return -1;
}
int a = (left+right)/2;//找到中间值
if(arr[a]>key){//中间值元素大于特定元素就重新进入方法,右值替换中间值减一
return aaa(arr,left,a-1,key);
}else if(arr[a]<key){//中间值元素小于特定元素就重新进入方法,左值替换中间值加一
return aaa(arr,a+1,right,key);
}else{//否则返回中间值
return a;
}
}
binary search
最新推荐文章于 2023-08-08 10:58:14 发布