二分查找
要求:必须采用顺序存储结构;必须按关键字大小有序排列。实现方法分为循环和递归两种
循环法:
/*
* 循环法
* 要求:必须采用顺序存储结构;必须按关键字大小有序排列
*/
public static int binarySearch (int a[], int key) {
int low = 0;
int high = a.length - 1;
while (low <= high) {
int middle = (low + high) / 2;
if (key == a[middle]) {
return middle;
} else if (key < a[middle]) {
high = middle - 1;
} else {
low = middle + 1;
}
}
return -1;
}
递归法:
/*
* 递归法
*/
public static int binSearch (int[] a, int start,int end, int key) {
int mid = (end - start)/2 + start;
if (a[mid] == key) {
return mid;
}
if (start >= end) {
return -1;
}else if (key > a[mid]) {
return binSearch(a, mid + 1, end, key);
}else if (key < a[mid]) {
return binSearch(a, start, mid - 1, key);
}
return -1;
}