二分查找值递归与循环
1,递归
效果实现:
代码实现:
int []arr={
1,2,3,4,5,6,7,9,10,15,56,78,90,100};
search(arr,90,0,arr.length-1);
//递归 二分查找------前提:数组升序
private static void search(int [] arr,int x,int start,int end) {
//1,定义查找范围,求出中间数的下标
int mid=(start+end)/2;
//2,和中间数进行比较
if (x==arr[mid]){
System.out.println("找到了,在数组中,下标为:"+mid);
return;
}else if (x>arr[mid]){
// 区间在右边
start=mid+1;
}else {
//区间在左边
end=mid-1;
}
//正常的范围
if (start<=end){
//递归
search(arr,x,start,end);
}else {
System.out.println(x+"不在数组中");
}
}
2,循环实现
这里我用的是while循环
效果实现:
代码实现:
int []arr={
1,2,3,4,5,6,7,9,10,15,56,78,90,100};
search1(arr,0);
//循环 二分查找------前提:数组升序
private static void search1(int [] arr,int x) {
int start=0;
int end=arr.length-1;
int mid=(start+end)/2;
while (start<=end){
//2,和中间数比较
if (x==arr[mid]){
System.out.println("找到了,在数组中,下标为:"+mid);
return;
}else if (x>arr[mid]){
start=mid+1;
}else {
end=mid-1;
}
mid=(start+end)/2;
}
System.out.println(x+"不在数组中");
}