import java.util.Scanner;
public class BinaryFind {
/**
* 作者:zpc
* 功能:对非重复有序元素集合实现二分查找(折半查找)
*/
public static void main(String[] args) {
BinaryFind bf = new BinaryFind();
System.out.println(“请输入测试的数据数量,建议100以内!”);//用户输入要在多少个数中查找
Scanner sn = new Scanner(System.in);
int num = sn.nextInt();
int dataArray[] = new int[num];
System.out.println(“*******请输入” + num + “个非重复有序的元素*******”);
for (int i = 0; i < dataArray.length; i++) {
// 用户从键盘录入数据
System.out.println(“第” + (i + 1) + “个元素:”);
int indexValue = sn.nextInt();
dataArray[i] = indexValue;
}
System.out.println(“请输入要查找的一个元素:”);
int value = sn.nextInt();
bf.find(0, dataArray.length-1, value, dataArray);
}
public void find(int leftIndex, int rightIndex, int value, int[] array) {
// 首先找到中间的数
int midIndex = (leftIndex + rightIndex) / 2;
int minVal = array[midIndex];
if (leftIndex <= rightIndex) {
// 在左边继续找
if (value < minVal) {
find(leftIndex, midIndex – 1, value, array);
}
// 在右边继续找
else if (value > minVal) {
find(midIndex + 1, rightIndex, value, array);
} else {
System.out.println(“找到该值,在数组中的下标为:” + midIndex);
}
}else{
System.out.println(“在序列中没有找着元素 “+value+”。”);
}
}
}