2

私は現在、特定のポイントで開始し、Arrayそれを正しい 1 つの場所に押し下げて、既存の値がある場所に新しい値を配置できるようにするループの作成に苦労しています。挿入ソートです。

これまでのところ、値がどのスポットに行くかを見つけるループがあります。

int hold=0;
 for (int j = 0; j < nElements; j++)   
 {
    int temp = list[j];
    if (temp <= value)
    {
       hold = j;  
    }

 }

私は今、すべてをシフトする for for ループを書いています。私は持っている:

for (int j = hold; j >= numElements; j--)
 {
     int temp = list[j];
     list[j] = value;

     list[j+1] = temp;

    }

nElements は、配列に格納した現在の int の数です。

これが行っていることは、配列に整数を追加するメソッドを呼び出すときに、スポット 0 に最初の数値を挿入するだけです。メソッドが再度呼び出されると、数値はまったく追加されません。

のような定義済みのメソッドも使用できませんSystem.arraycopy()。ループをコーディングする必要があります。

4

1 に答える 1

0

を使用する必要がありますSystem.arrayCopy()

あなたは実際には何もコピーしていません。なぜなら、あなたは決して起こらないはずholdの間にループし始めているからです。j >= nElements

部屋を空けるには、次のようなものを使用する必要があります。

System.arrayCopy(list, hold, list, hold+1, nElements - hold - 1);

追加されましたが、システムコールを使用できないことがわかりました。

または、arrayCopy許可されていない場合は、次のようなループが必要になります。

for ( int i = nElements - 1; i > hold; i-- ) {
  list[i] = list[i-1];
}

この質問は宿題である可能性が高いため、このコードは意図的にテストされていないことに注意してください。

于 2013-02-14T00:27:40.480 に答える