二分查找法:
此方法针对有序的数组,给一个目标元素,找出数组中与目标元素相同的元素。具体实践方法:首先比较整个数组中间元素是否与给定的目标元素值相同,如果相同,返回该中间元素的索引。如果中间元素大于目标元素,然后再取左侧数组中间元素再与目标元素相比,依次向左减少数组的长度进行比较,直至数组的长度变为0.如果中间元素小于目标元素,那么就以同样的方式向右查找 。
code:
private static int halfSort(int[] arr, int value) {
int min, max, mid;
min = 0;
max = arr.length - 1;
mid = (max + min) / 2;
while (value != arr[mid]) {
if (value > arr[mid]) {
min = mid + 1;
} else if (value < arr[mid]) {
max = mid - 1;
}
mid = (min + max) / 2;
if (min > max) {
return -1;
}
}
return mid;
}
Arrays
类中的源码分析:
在int[]
数组fromIndex(inclusive) -- toIndex(exclusive)
之间通过二分查找法查找目标元素Key
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;//mid为中间索引值
int midVal = a[mid];//中间索引对应的元素
if (midVal < key)//中间元素小于目标元素
low = mid + 1;//最低索引右移
else if (midVal > key)// 相反,如果中间元素大于目标元素
high = mid - 1; //最大索引左移
else
return mid; // 找到
}
return -(low + 1); // 未找到
}