java二分查找
- java二分迭代查找
//arr为查找数组(已从从小到大排序),start为数组查找开始位置,end为结束位置,key为查找的数
static int IterationFind( int[] arr ,int start,int end, int key){
//判断查找内容是否超出了数组最大值和数组中最小值
if(key<arr[start]||key>arr[end])
return -1;
int half;
while(true){
half=(end-start)/2+start;
if(arr[half]==key){
return half;//查找到返回位置
}else if(arr[half]<key){
//如果key大于此位置则缩小开始范围
start=half;
}else if(arr[half]>key){
//如果key小于此位置则缩小结尾范围
end=half;
}
}
}
- java二分递归查找
//arr为查找数组(已从从小到大排序),start为数组查找开始位置,end为结束位置,key为查找的数
static int recursiveFind( int[] arr ,int start,int end, int key){
//查找数字必须在数组中,非则返回-1
if(key<arr[start]||key>arr[end])
return -1;
//位置折半
int half=(end-start)/2+start;//(end-start)/2+start可以防止溢出
if(arr[half]>key){
//递归调用本身
return recursiveFind(arr,start,half-1,key);
}else if(arr[half]<key){
return recursiveFind(arr,half+1,end,key);
}else
return half;//查找到返回位置
}
谢谢观看,如有问题请添加微信:cruelYouX