二分查找,适应于有序的集合,也叫 折半查找,写了两种实现,递归与 非递归的
public class BinarySearch {
public static void main(String[] args) {
int[] arra = {1, 3, 5, 7, 9, 11,12,19,23,28};
//int index = midSearch(arra, 9);
int index=midSearch2(7,arra,0,arra.length-1);
System.out.println(index);
}
public static int midSearch(int[] arra, int number) {
int left = 0;
int right = arra.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
int midNumber = arra[mid];
if (number == midNumber) {
return mid;
} else if (midNumber > number) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
/**
* 递归二分查找
* @param searchKey
* @param arra
* @param beginIndex
* @param endIndex
* @return
*/
public static int midSearch2(int searchKey,int[] arra,int beginIndex,int endIndex){
int current=(beginIndex+endIndex)/2;
if(arra[current] == searchKey){
return current;
}
if(beginIndex>endIndex){
return -1;
}
if(arra[current]<searchKey){
return midSearch2(searchKey,arra,current+1,endIndex);
}
else{
return midSearch2(searchKey,arra,beginIndex,current-1);
}
}