您的位置:首页 > 编程语言 > Java开发

Java 基础 快速掌握2分法查找

2018-01-15 16:35 351 查看

一、概述

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
4000
[] 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分法查找,就简单介绍到这里,不要纠结算法的实现过程.很痛苦,知道特点能灵活运用即可!

谢谢大家参考!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: