二分查找,返回等于的元素,JDK中的代码
private static int binarySearch0(int[] a, int fromIndex, int toIndex,
int key) {
int low = fromIndex;
int high = toIndex - 1;
while (low <= high) {
int mid = (low + high) >>> 1;
int midVal = a[mid];
if (midVal < key)
low = mid + 1;
else if (midVal > key)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key not found.
}
查找第一个等于给定值的元素
private int binarySearchFirst(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] < target) {
left = mid + 1;
} else if (arr[mid] > target) {
right = mid - 1;
} else {
if (mid == 0 || arr[mid - 1] != target) {
return mid;
} else {
right = mid - 1;
}
}
}
return -1;
}
查找最后一个等于给定值的元素
private int binarSearchLast(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] < target) {
left = mid + 1;
} else if (arr[mid] > target) {
right = mid - 1;
} else {
if (mid == arr.length - 1 || arr[mid + 1] != target) {
return mid;
} else {
left = mid + 1;
}
}
}
return -1;
}