一、概述
2分法查找是一种查找算法,它的优点是:
1、比较的次数少
2、查找的速度快
3、平均性能好
有个缺点是:
1、查找的列表必须要是 有序 的
二、思路
1、在给出的有序排列的数组中,把 目标值 和 数组中间值 进行比较
2、如果相等,则返回中间值下标
3、如果目标值 小于 中间值,就从数组的 前半段 再次执行二分法查找
4、如果目标值 大于 中间值,从数组的 后半段 开始二分法查找
二、实现
public class MathUtils {
public static void main(String[] args) {
//有序排列数组(大到小,小到大无所谓)
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//打印二分法的返回值
System.out.println(findRecursive(array, 0, array.length - 1, 9));
}
/**
* 递归查找-2分法
*
* @param array 需要查找的数组
* @param start 开始位置
* @param end 结束位置
* @param findValue 要查找的数据
* @return
*/
public static int findRecursive(int[] array, int start, int end, int findValue) {
if (array == null) {
return -1;
}
if (start <= end) {
//中间位置
int middle = (start + end) / 2;
//中值
int middleValue = array[middle];
if (findValue == middleValue) {
//与中值相等就直接返回
return middle;
} else if (findValue < middleValue) {
//目标值小于中值,在中值前面找(这里调用了二分法的方法)
return findRecursive(array, start, middle - 1, findValue);
} else {
//目标值大于中值,在中值后面找(这里调用了二分法的方法)
return findRecursive(array, middle + 1, end, findValue);
}
} else {
//返回-1,查找失败
return -1;
}
}
}
OK,非常简单的2分法查找,就简单介绍到这里,不要纠结算法的实现过程.很痛苦,知道特点能灵活运用即可!
谢谢大家参考!