二分搜索模板:
start = 0;
end = n - 1;
while (start + 1 < end) {
mid = start + (end - start) / 2;
if (arr[mid] == value) return mid;
if(arr[mid] < value) start = mid;
if(arr[mid] > value) end = mid;
}
//下面的检查 start 和 end 的顺序根据实际情况,看是找含重复数字的第一个还是最后一个进行调整
if (array[start] == value) return start;
if (array[end] == value) return end;
return -1;
实现
public class BinarySearch {
public static int binarySearch(int[] array, int value) {
int n = array.length;
int start, mid, end;
start = 0;
end = n - 1;
while (start + 1 < end) {
mid = start + (end - start) / 2;
if (array[mid] == value) {
return mid;
}
if (array[mid] > value) {
end = mid;
} else if (array[mid] < value) {
start = mid;
}
}
if (array[start] == value) return start;
if (array[end] == value) return end;
return -1;
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7,8,9};
int value = 7;
System.out.println(binarySearch(array, value));
}
}