数组中的二分查找法

解题思路:

前提条件:必须是一组连续的整数。

注:对于无序数组,先进行排序,再使用二分查找。

分别有三种情况:
①当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("没有");
}


版权声明:本文为wy200144原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。