目的:用Java编写了一个递归实现二分查找(BinarySearch)的程序,希望能够在命令行运行:读取键盘输入的一个整数作为输入参数key(即 所查找的数),输出每次递归调用二分查找时的中间数,以及查找结果(key值在数组中的位置)。
注:被查找数组我设为 int[ ] a = { 0, 1, 2, ... ..., 98, 99 }
代码:
// recursive BinarySearch
import java.util.*; //要导入响应的库
public class RecursiveBS {
public static int rank(int key, int[] a) {
return rank(key, a, 0, a.length-1);
}
public static int rank(int key, int[] a, int lo, int hi) { /*二分查找的递归实现*/
if(lo>hi) return -1;
int mid = lo + (hi-lo)/2;
System.out.println("mid: " + mid);
if(key == a[mid]) return mid;
else if(key<a[mid]) return rank(key,a,lo,mid-1);
else return rank(key,a,mid+1,hi);
}
public static void main(String[] args) {
Scanner inPut = new Scanner(System.in); //用到 Scanner类
int key = inPut.nextInt(); //
inPut.close(); //
int[] a = new int[100];
for(int i = 0;i<a.length;i++) {
a[i] = i;
}
int pos = rank(key,a);
System.out.println("the pos is: " + pos);
}
}
运行:
1)在命令行编译并执行RecursiveBS类文件:......输入命令java RecursiveBS,回车;
2)输入一个整数作为要查找的key值 如:87,回车;即得到输出结果。
3) 测试一下其他的数:
输入99:
输入101:
待改进:如何输入多个数 而不用每次都重新执行java RecursiveBS命令