非递归方法
public int binarySearch_asc(int[] array, int data) {//正序列查找
int beginIndex = 0;
int endIndex = array.length - 1;
int midIndex = -1;
if (data < array[beginIndex] || beginIndex > endIndex
|| data > array[endIndex]) {
return -1;
}
while (beginIndex <= endIndex) {
midIndex = (beginIndex + endIndex) >> 1;
if (data < array[midIndex]) {
endIndex = midIndex - 1;
} else if (data > array[midIndex]) {
beginIndex = midIndex + 1;
} else {
return midIndex;
}
}
return -1;
}
public int binarySearch_desc(int[] array, int data) {//逆序列查找
int beginIndex = 0;
int endIndex = array.length - 1;
int midIndex = -1;
if (data > array[beginIndex] || beginIndex > endIndex
|| data < array[endIndex]) {
return -1;
}
while (beginIndex <= endIndex) {
midIndex = (beginIndex + endIndex) >> 1;
if (data < array[midIndex]) {
beginIndex = midIndex - 1;
} else if (data > array[midIndex]) {
endIndex = midIndex + 1;
} else {
return midIndex;
}
}
return -1;
}
递归方法
public int binarySearch(int[] array, int data, int beginIndex, int endIndex) {
int midIndex = (beginIndex + endIndex) >> 1;
if(data < array[beginIndex] || data > array[endIndex] || beginIndex > endIndex ){
return -1;
}
if(data>array[midIndex]){
return binarySearch(array,data,midIndex +1 , endIndex);
}else if(data<array[midIndex]){
return binarySearch(array,data,beginIndex , midIndex - 1);
}else {
return midIndex;
}
}