0

当我运行程序时,它恰好通过了插入排序,但是当我使用二进制搜索询问您想在数组中搜索哪个数字时,程序静止不动,它不会终止或任何事情. 我相信这与我的扫描仪有关。我已经使用单独的扫描仪进行插入排序和二进制搜索解决了这个问题,但我不应该创建单独的扫描仪来使其工作,对吗?

import java.util.Scanner;
public class Search {
    public static void main(String [] args){

        Insertion insert = new Insertion();
        Scanner input = new Scanner(System.in);

        int[] array = new int[5];

        int low = 0, high = array.length - 1, mid = (low+high)/2;
        int num =0;
        int target = 0;

        for(int i = 0; i < array.length; i++){
            System.out.println("Enter a number: ");
            num = input.nextInt();
            array[i] = num;
        }

        insert.insertion_srt(array, array.length);

        System.out.println("Your numbers sorted: ");

        for(int a = 0; a < array.length; a++){
            System.out.print(array[a]+" ");
        }

        System.out.println("\nWhich number do you want to look for?: ");
            target = input.nextInt();

        while(low<=high && array[mid] != target){
            if(target > array[mid])
                low = mid + 1;
            else
                high = mid -1;
        }

        if(low>high)
                mid = -1;

        System.out.println(mid);
        input.close();

    }

}
4

2 回答 2

2

这很可能是因为mid您的 WHILE 循环中的值永远不会改变:while(low<=high && array[mid] != input)。因此,循环永远不会终止,因为如果array[mid]最初不等于输入(并且永远不会改变),那么它将继续运行。也许mid在 IF 决定之后重新定义变量?

if(target > array[mid])
  low = mid + 1
else
  high = mid - 1
mid = (low+high)/2

while 条件的另一半while(low<=high.. 也永远不会为真,因为mid变量永远不会改变。即如果mid = 2target > array[mid]low则将变为 3。因此,每次迭代时,low变量将始终被赋值为 3。

于 2013-02-06T05:10:57.980 回答
0

问题不在于扫描仪,而在于您如何搜索所需值。如果您想实现二进制搜索,那么您的实现是不正确的。这是正确的实现:

while (low<=high && array [mid] != target)
{
    if (target > array [mid])
        low = mid + 1;
    else
        high = mid - 1;

    mid = (low + high) / 2; // You probably missed this
}
于 2013-02-06T05:17:48.127 回答