一、二分搜索算法的基本思想
将n个数分成个数大致相等的两半,左、右两部分,取a[ n/2 ]与x进行比较。
如果x 和 a[ n/2 ]相等,则找到x,算法结束;
如果a[ n/2 ] > x, 则继续在左半部分搜索x;
如果a[ n/2 ] < x,则继续在右半部分搜索x;
二、二分搜索算法的java实现
public class BinarySearch {
/**
* 实现一
* */
public static int search(int[] sortedInts, int target){
int middle;
int left = 0, right = sortedInts.length - 1;
while(left <= right){
middle = (left + right) / 2;
if(sortedInts[middle] == target){
return middle;
}else if(sortedInts[middle] > target){
right = middle - 1;
}else{
left = middle + 1;
}
}
return -1;
}
/**
* 实现二
* */
public static int search(int[] sortedInts, int fromIndex, int toIndex, int target){
if(fromIndex > toIndex) return -1;
int middle = (fromIndex + toIndex) / 2;
if(sortedInts[middle] == target){
return middle;
}else if(sortedInts[middle] > target){
return search(sortedInts, fromIndex, middle - 1, target);
}else{
return search(sortedInts, middle + 1, toIndex, target);
}
}
public static void main(String[] args){
int[] ints = {1, 2, 3, 5, 6, 7};
int target = 5;
//int index = search(ints, 0, ints.length - 1, target);
int index = search(ints, target);
System.out.println("index:" + index);
}
}
...