0

選択ソート アルゴリズムを作成するように依頼されましたが、機能しておらず、その理由もわかりません。コードは次のとおりです。

    int count = 0;
    int count2;
    int min;
    int size = scan.nextInt();
    int temp = 0;
    int[] numbers = new int[size];

    while (count < size) {
        numbers[count] = scan.nextInt();
        count ++;
    }
    count = 0;
    while (count < size) {
        count2 = size;
        min = numbers[count];
        while (count < count2) {
            count2 --;
            if (numbers[count2] < numbers[min]) {
                min = count2;
            }
        }
        temp = numbers[temp];
        numbers[temp] = numbers[count];
        numbers[count] = temp;
        count ++;
    }

    count = 0;
    while (count < size) {
        System.out.println(numbers[count]);
        count ++;
    }   
}

入力: 10 1 0 2 9 3 8 4 7 5 6

出力: 1 2 9 8 3 3 8 4 7 4

4

4 に答える 4

1

whileループでは、numbers[0]要素をnumbers[]のインデックスとして使用しようとしていますnumbers[min]

min = numbers[count]; \\min is value of first element of numbers[]
    while (count < count2) {
        count2 --;
        if (numbers[count2] < numbers[min]) {  \\ you try to use value of numbers[0] element as index of numbers[] aray.
            min = count2;
        }

(numbers[count2] < numbers[min])ifを ifに置き換えます(numbers[count2] < min)

于 2013-09-17T14:10:09.427 に答える
0

これは、Java で for の優れた機能を使用して機能するアルゴリズムです。これfor (int current : array)は、while や for を使用するよりもはるかに便利です。

    int min;
    int mem = 0;
    int size = 11;
    int [] numbers = {10, 1, 0, 2, 9, 3, 8, 4, 7, 5, 6};

    for (int i=0; i<size-1; i++){
        min =i;
        for(int j=i+1; j<size; j++){
            if (numbers[j]<numbers[min]){
                min = j;
            }
        }

        // swap
        mem= numbers[i];
        numbers[i] = numbers[min];
        numbers[min] = mem;

    }

    for (int toPrint : numbers){
        System.out.println(toPrint);
    }

}
于 2013-09-17T14:09:57.380 に答える
0

出力で(入力にはない)重複する値を取得しているという事実は、スワップが機能しないことを意味します。

temp = numbers[temp];
numbers[temp] = numbers[count];
numbers[count] = temp;

間違っている。

minではなく、である必要がありますtemp

temp = numbers[min];
numbers[min] = numbers[count];
numbers[count] = temp;
于 2013-09-17T14:05:19.670 に答える
0
temp = numbers[temp];
numbers[temp] = numbers[count];
numbers[count] = temp;
count ++;

このコードをもう一度見てください。

最初の入力が 11 の場所でこれを実行すると、範囲外のインデックスでエラーが発生します。

特に、何を達成する予定temp = numbers[temp]ですか? temp を本質的に任意の数値に割り当てています。これは、何でもかまいませんnumbers[0]

于 2013-09-17T14:02:31.940 に答える