二分查找针对的是一个有序的数据集合。二分查找依赖的是顺序表结构,简单点说就是数组。不能通过链表来实现。数据量太小不适合二分查找。
int low = 0;
int high = array.length;
while (low <= high) {
int mid = (low + high) / 2;
if (array[mid] == value) {
return mid;
} else if (array[mid] > value) {
high = mid-1;
} else {
low = mid+1;
}
}

变体一:查找第一个值等于给定值的元素

变体二:查找最后一个值等于给定值的元素

变体三:查找第一个大于等于给定值的元素

变体四:查找最后一个小于等于给定值的元素