前提:已经排好序的序列
思想:对于一个已经升序排序好的数组,直接折半,查看数组中间的元素,并且与需要查找的关键字进行比较,如果关键字大,则在折半数组的右半边进行查找,对于右半边数组再进行折半比较,如果关键字小,则在折半数组左半边再进行折半查找,重复以上操作
java代码
循环
public static int binSearchone(int A[],int key) {
int start = 0;
int end = A.length-1;
while (start <= end)
{
int mid = (start + end) / 2;
if (A[mid] == key)
{
return mid;
}
else if (A[mid] < key)
{
start = mid+1;
}
else
{
end = mid - 1;
}
}
return -1;
}
递归
public static int binSearch(int A[], int start, int end, int key) {
int mid = (end + start) / 2;
if(A == null) {
return -1;
}
//说明没有查询到
if (start > end) {
return -1;
}
if (key > A[mid]) {
return binSearch(A, mid + 1, end, key);
} else if (key < A[mid]) {
return binSearch(A, start, mid - 1, key);
} else {
return mid;
}
}
主程序及运行结果



