递归形式
public static int binarySearch(int[] arr, int key, int head, int end) {
int index = -1;
int mid = (head + end) / 2;
if(key == arr[mid]) {
return mid;
}
if (head >= end) {
return -1;
}
if (head <= end) {
if (key > arr[mid]) {
index = binarySearch(arr, key, mid + 1, end);
//因为在前面已经判断了arr[mid]和key的值是否相等,因此执行+1操作,若不执行,则会陷入死循环
}
if (key < arr[mid]) {
index = binarySearch(arr, key, head, mid - 1);
}
}
return index;
}
非递归形式
public static int binarySearch(int[] arr, int key, int head, int end) {
int index = -1;
int mid;
mid = (head + end) / 2;
while (head <= end) {
if (arr[mid] == key) {
index = mid;
return index;
}
if (arr[mid] < key) {
head = mid + 1;
mid = (head + end) / 2;
}
if (arr[mid] > key) {
end = mid - 1;
mid = (head + end) / 2;
}
}
return index;
}