非递归
public class BinarySearch {
public static void main(String[] args) {
int[] array = {1,3, 8, 10, 11, 67, 100};
int index = binarySearch(array, 1200);
System.out.println("index=" + index);
}
/**
* 如果找到返回对应下标,否则返回-1
* 这个案例是针对升序排序的数组
* @param array
* @param target
* @return
*/
public static int binarySearch(int[] array, int target){
int low =0;
int hight=array.length-1;
while(low<=hight){ //遍历还没结束
int mid = (low+hight)/2; //取中间值mid点位置
if(array[mid]==target){ //寻找到目标数
return mid;
}
if(array[mid] > target){ //如果中间值大于目标数,则将highr点位置移动mid位置左边
hight = mid-1;
}
if(array[mid] < target){ //如果中间值小于目标数,则将low点位置移动mid位置右边
low = mid+1;
}
}
return -1;
}
}
递归
public class TestBinarySearch {
private static int binarySearch(int[] arr, int findVal, int left, int right) {
if (left > right) {
return -1;
}
int mid = (left + right) / 2;
if (findVal == arr[mid]) {
return mid;
} else if (findVal > arr[mid]) {
return binarySearch(arr, findVal, mid, right);
} else if (findVal < arr[mid]) {
return binarySearch(arr, findVal, left, mid);
}
return 0;
}
public static void main(String[] args) {
int[] arr = {1, 8, 10, 89, 1000, 1000, 1234, 5678};
int findVal = 5678;
System.out.println(binarySearch(arr, findVal, 0, arr.length));
}
}