二分查找-Java
概念
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
代码
查找目标数据是否存在数组中,存在返回下标,不存在返回-1
public static int binarySearchDemo(int[] arr, int target) {
if (arr == null || arr.length == 0) {
return -1;
}
int pre = 0;
int last = arr.length - 1;
int mid;
while (pre <= last) {
mid = (pre + last) >>> 1;
if (arr[mid] < target) {
pre = mid + 1;
} else if (target < arr[mid]) {
last = mid - 1;
} else {
return mid;
}
}
return -1;
}
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
public static int searchInsert(int[] arr, int target) {
if (arr == null || arr.length == 0) {
return 0;
}
int pre = 0;
int last = arr.length - 1;
int mid = -1;
while (pre <= last) {
mid = (pre + last) >>> 1;
if (arr[mid] < target) {
pre = mid + 1;
} else if (target < arr[mid]) {
last = mid - 1;
} else {
return mid;
}
}
return pre;
}