解题思路:
前提条件:必须是一组连续的整数。
注:对于无序数组,先进行排序,再使用二分查找。
分别有三种情况:
①当num=array[middle]时:
恭喜你,很幸运,找到了这个数。
②当num>array[middle]时:
begin=middle;
middle=(begin+end)/2;
③当num<array[middle]时:
end=middle;
middle=(begin+end)/2;
代码:
Scanner scanner = new Scanner(System.in);
boolean flag = false;
int len = (int) (Math.random() * 20 + 1);
int[] array = new int[len];
for (int i = 0; i < len; i++) {
array[i] = (int) (Math.random() * 100 + 1);
}
Arrays.sort(array);//对数组进行排序操作
System.out.println(Arrays.toString(array));
System.out.println("请输入一个数:");
int num = scanner.nextInt();
int begin = 0;
int end = len - 1;
int middle = (begin + end) / 2;
//end > begin + 1表示中间还有元素
while (end > begin + 1) {
if (num == array[middle]) {
flag = true;
break;
} else if (num > array[middle]) {
begin = middle;
middle = (begin + end) / 2;
} else {
end = middle;
middle = (begin + end) / 2;
}
}
if (flag) {
System.out.println("有");
} else {
System.out.println("没有");
}