【数据结构】二分查找
二分查找
实现思路
二分查找,又叫折半查找。通常是在一个有序列表中实现查找。分为两种实现方式:非递归实现和递归实现。
非递归实现中,需要定义开始start
和结束end
值,再定义一个中间mid
,将这三个位置作为标点。
递归实现中,需要给出strat
和end
值,之后通过递归调用不断改变各标点的值,完成二分查找。
实现代码
public int binSearch (int[] array, int key) {
// 非递归方法实现二分查找
int start = 0;
int end = array.length - 1;
while (start <= end) {
int mid = (start + end) / 2;
if (key > array[mid]) {
start = mid + 1;
} else if (key < array[mid]) {
end = mid - 1;
} else {
return mid;
}
}
// 若没有找到,则返回-1
return -1;
}
public int binSearch (int[] array, int key, int start, int end) {
// 递归实现二分查找
int mid = (end - start) / 2 + start;
if (key == array[mid]) {
return mid;
} else if (start > end) {
return -1;
} else if (key < array[mid]) {
// 设置为mid-1可以避免一个空间的浪费,下面同理
return binSearch(array, key, start, mid - 1);
} else if (key > array[mid]) {
return binSearch(array, key, mid + 1, end);
}
return -1;
}