非递归:
代码:
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4,5,6,7,8,9,10};
int i = binarySearch(arr, 1);
System.out.println(i);
}
public static int binarySearch(int[] arr,int key){
int begin = 0;//头索引
int end = arr.length-1;//尾索引
while (end >= begin){
int mid = (begin + end) >> 1;//计算中间索引,位运算,右移一位相当于除以2
if (arr[mid] == key){//找到了!
return mid;
}
if (arr[mid] > key){//要找的数在中间索引的左侧
end = mid - 1;
}else {//右侧
begin = mid + 1;
}
}
return -1;
}
运行结果:
递归:
代码:
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4,5,6,7,8,9,10};
int i = binarySearch(arr, 0, arr.length - 1, 11);
System.out.println(i);
}
public static int binarySearch(int[] arr,int begin,int end,int key){
//判断是否结束
if (begin > end){
return -1;
}
//计算中间指针
int mid = (begin + end) >> 1;
if (arr[mid] == key){
return mid;
}else if (arr[mid] > key){//在左侧
end = mid-1;
}else {
begin = mid+1;
}
return binarySearch(arr,begin,end,key);
}
运行结果: