原理:每次都将数组进行折中,取中间值mid,用中间值比对目标值,看与目标值谁大谁小,如果比目标值大则,区间就是[start, mid - 1],如果比目标值小则,查找区间就是[mid + 1, end]。
弊端:只适合有序数列。如果无序则无效了;
Java 代码
public class BinarySearch {
public static void main(String[] args) {
int[] a = {1,3,5,6,7,8,9,13,15,34};
//目标元素
int target = 8;
String result = binarySearch(a, target);
System.out.println(result);
}
public static String binarySearch(int[] a, int target) {
//开始位置
int start = 0;
//截止位置
int end = a.length - 1;
//中间位置
int mid = ((end - start) >> 1) + start;//这里注意一下优先级,否则会造成死循环。
//记录目标位置;
int index = -1;
while(true) {
//判断中间是不是要查找的元素
if(a[mid] == target) {
index = mid;
break;
}else {//如果不是
//判断中间这个元素跟目标值的关系,大于则
if(a[mid] > target) {//查找的在target在 mid前面
end = mid - 1;
}else {
//大于则查找的在target在 mid后面
start = mid + 1;
}
//新的中间位置
mid = ((end - start)>> 1) + start;
}
}
return "位置是:"+index;
}
}