0

これは私の最初の挿入配列ですが、おそらくソートされず、どこで間違ったのかわかりません。何か案は?

  for (int i=1; i<array.length; i++) {
            int temp = array[i];
            for (int j=i-1; j >=0 && temp < array[j]; j--) {
                array[j+1] = array[j];
                array[j+1] = temp;
            }
            ItsATextArea.append(array[i] + "\n");
        }
4

3 に答える 3

1

私はあなたがここで間違っていると思います

array[j+1] = array[j];
array[j+1] = temp;  // It must be array[j] = temp
于 2013-05-16T14:40:23.827 に答える
1

あなたはほとんどそれを正しく持っていました。「配列[j + 1] = temp;」行はループの外にある必要があります。

        for (int i=1; i<array.length; i++) {
            int temp = array[i];
            int j = i - 1;
            for (; j >=0 && temp < array[j]; j--) {
                array[j+1] = array[j];
            }                   
            array[j+1] = temp;
        } 

また、並べ替えられた配列を印刷する予定がある場合は、アルゴリズムが終了してから行ってください。挿入された要素「temp」が「append」行を追加した場所にまだ正しい位置にあるかどうかを本当に知ることができないためです。たとえば、元の配列の最後の要素が最小の要素である場合、すべての要素を 1 つ右にシフトする必要があります。

于 2013-05-16T19:14:13.297 に答える
0
array[j+1] = array[j];
array[j+1] = temp;

私にはバギーに見えます。配列内の同じ要素を 2 回使用してもよろしいですか?

于 2013-05-16T14:37:53.587 に答える