用java编写的使用递归的二分搜索的实现
来源:互联网 发布:mac os x lion镜像 编辑:程序博客网 时间:2024/05/18 18:42
刚才在看Beautiful Code一书的 测试 一节,于是用java写了一个 二分搜索的实现类。
public class BinarySearch {
private int times=0;
/**
* 二分搜索,返回索引,如果返回的是-1,那么就没有找到
*
* @param datas
* @param target
* @return
*/
public int search(int[] datas, int target, int lowerIndex, int upperIndex) {
times++;
System.out.println("执行第"+times+"次二分搜索");
int index = -1;
//low + ((high - low) / 2);
int middleIndex = lowerIndex+( upperIndex-lowerIndex) / 2;
/*
* 终止递归的条件 可能最低和最高是同一个位置
* */
if (lowerIndex >= upperIndex ) {
if (target == datas[middleIndex]) {
times=0;
return middleIndex;
} else {
times=0;
return -1;
}
}
/*
* 终止递归的条件 可能最低和最高只差一位, 由于java的int整除是截断的,因此,无法算到另一个值。
* */
if((lowerIndex+1)==upperIndex){
if(target==datas[lowerIndex]){
times=0;
return lowerIndex;
}else if(target==datas[upperIndex]){
times=0;
return upperIndex;
}else{
times=0;
return -1;
}
}
if (target == datas[middleIndex]) {
times=0;
return middleIndex;
} else if (target < datas[middleIndex]) {
index = this.search(datas, target, lowerIndex, middleIndex-1);
} else {
index = this.search(datas, target, middleIndex+1, upperIndex);
}
times=0;
return index;
}
/**
*
*/
public BinarySearch() {
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
BinarySearch binarySearch=new BinarySearch();
int[] datas={0,1,2,5,10,20,30,50,64,72,88,91,302,3434,5454,5656,6767,7666,10000};
int target=-1;
int index=binarySearch.search(datas, target, 0, datas.length-1);
if(index==-1){
System.out.println("未找到"+target);
}else{
System.out.println("找到"+target+" ,在第 "+index+"个位置。值是"+datas[index]);
}
target=91;
index=binarySearch.search(datas, target, 0, datas.length-1);
if(index==-1){
System.out.println("未找到"+target);
}else{
System.out.println("找到"+target+" ,在第 "+index+"个位置。值是"+datas[index]);
}
}
}
- 用java编写的使用递归的二分搜索的实现
- 递归实现的二分搜索
- 二分搜索的递归和循环实现
- 二分搜索的递归实现算法
- 二分搜索的递归实现算法
- 二分搜索的java实现
- 二分搜索的递归与非递归实现
- Java实现二分查找的递归算法
- 用递归的方式实现文件内容搜索(java)
- 用递归实现的二分查找
- 二分查找的递归实现
- 二分搜索树的实现
- 二分搜索算法的实现
- 自己实现的二分搜索
- Ackerman函数的递归、全排列的递归实现、整数划分的递归、二分搜索的递归、合并排序的递归、.快速排序
- 两种版本的二分搜索(递归+非递归)
- 递归于非递归的二分搜索法
- 二分搜索(折半搜索)的实现
- 无线网络概念全面接触(一)
- ISBN
- liferay4.3与Fedora的整合实现
- tsql 和 clr 的性能实测比对
- switch
- 用java编写的使用递归的二分搜索的实现
- l
- VC中基于 Windows 的精确定时
- VC语法 enum { IDD = IDD_ABOUTBOX };分析
- 奇怪的js NaN and Infinity
- 无线网络概念全面接触(二)
- 做网管的好处
- 多优先级队列调度算法
- 3.0改走毁伤