public class Dichotomy {
//定义查找次数
static int count = 0;
public static void main(String[] args) {
//定义数组
int [] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//二分法查找
int result = searchRecursive( array, 0, array.length - 1, 3);
//打印结果
System.out.println("二分法查找结果为=" + result);
System.out.println("查找次数为=" + count);
}
/**
* 执行递归二分查找,返回第一次出现该值的位置
*
* @param array
* 已排序的数组
* @param start
* 开始位置
* @param end
* 结束位置
* @param findValue
* 需要找的值
* @return 值在数组中的位置,从0开始。找不到返回-1
*/
private static int searchRecursive(int[] array, int start, int end, int findValue) {
//数组如果为空则返回-1
if(array == null){
return -1;
}
while(start <= end){
count++;
//获取中间位置
int middle = (start + end) / 2;
//获取中间值
int middleValue = array[middle];
if(middleValue == findValue){
return middle;
}else if(findValue < middleValue){
end = middle - 1;
}else{
start = middle + 1;
}
}
return -1;
}
}
相关文章
- DPDK Graph Pipeline 框架简介与实现原理
- 一文搞懂工作流审批(Java+activiti)快速开发+自定义工作流配置
- C#实现聊天消息渲染、图文混排(支持Windows、Linux)
- 201621123033 《Java程序设计》第8周学习总结
- MATLAB实现随机森林(RF)回归与自变量影响程度分析
- Java高并发之设计模式
- java多线程系列(二)---对象变量并发访问
- java多线程系列(二)
- JAVA之旅(十五)——多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题