2

私はバイナリ検索アルゴリズムを作成しましたが、正常に動作しますが、重複がある場合、または配列内に 2 桁以上の数字がある場合は正しく動作しません。配列に見つからない値を返します。これを修正するにはどうすればよいですか? 重複を処理するために配列を検索して重複を探す必要がありますか? または、乱数ジェネレーターが重複を生成するのを止めることはできますか?

コードは次のとおりです。

public class BinarySearch {

    static int RandomNum;
    static int NumSize;
    static int[] arr;
    static int rangeOfNum;
    static int LookFor;
    static Random numGen = new Random();
    static Scanner Input = new Scanner(System.in);
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("Enter the size of the data set");
        NumSize = Input.nextInt();
        System.out.println("Enter the range of the random numbers");
        rangeOfNum = Input.nextInt();
        arr = new int[NumSize];
        for (int i = 0; i <= NumSize-1; i++) {
            RandomNum = numGen.nextInt(rangeOfNum);
            arr[i] = RandomNum; 
        }
        Arrays.sort(arr);
        for (int i = 0; i < arr.length; i++)
        System.out.println("Number is: " + arr[i]);
        System.out.println("Enter number you want to search for: ");
        LookFor = Input.nextInt();
        binarySearch(arr[0], arr.length-1, LookFor, arr);
    }
    //Binary Search Algorithm
    public static int binarySearch(int LowIndex, int HighIndex, int Target, int[] array) {  
        if (LowIndex <= HighIndex) {
            int MidIndex = (LowIndex + HighIndex)/2;
            if (array[MidIndex] == Target){
                System.out.println("Found target value at index " + MidIndex);
                return Target;}
                else if (array[MidIndex] > Target)
                    return binarySearch(LowIndex, MidIndex-1, Target, array);
                    else 
                        return binarySearch(MidIndex+1, HighIndex, Target, array);
        }
        System.out.println("target value not found");
        return -1;
    }
}

助けてくれてありがとう。

4

1 に答える 1

2

初めて呼び出すbinarySearchときは、次のように呼び出します。

binarySearch(arr[0], arr.length-1, LookFor, arr);

に変更します

binarySearch(0, arr.length-1, LookFor, arr);
于 2013-10-25T19:30:08.000 に答える