0

10個の数字で.txtファイルを注文する次のアルゴリズムがあります

for (int i=0;i<array.length;i++)
{
    for(int j=i;j<array.length;j++)
    {
        if (array[i]<array[j])
        {
            temp=array[i];
            array[i]=array[j];
            array[j]=temp;
        }
    }
}

そして、すべての番号を順番に新しい .txt ファイルに書き込みます。しかし、紙にペンを使うと、うまくいかないと言われます。それは次のとおりです。

7 10 4 3 5 8 1 3

アルゴリズムはこれを行う必要があります。

10 7 4 3 5 8 1 3
10 8 4 3 5 7 1 3
10 8 5 3 4 7 1 3
10 8 5 4 3 7 1 3
10 8 5 4 7 3 1 3
10 8 5 4 7 3 3 1

明らかに、最後の行は順番どおりではないのに、なぜコードは正しいのでしょうか? または... ペンと紙でやるとどこが間違っているのですか?

4

3 に答える 3

5

なぜ機能しないのですか?これは非常に基本的なソート アルゴリズムです (選択ソートと呼ばれます)。ペンと鉛筆の問題は、外側のことを忘れていることですfor。すべてのアイテムの並べ替えを続けます。それO(n^2)が複雑な理由です。

于 2013-07-24T16:42:20.717 に答える
0

なぜうまくいかないのでしょうか?位置 i ごとに、内部ループはリストの残りの最大のメンバーをその場所に効果的に移動します (選択ソートを行います)。

あなたの紙のウォークスルーは 3 番目のステップで間違っていたと思います。私は得る:

7 10 4 3 5 8 1 3 <- original list
^i
10 7 4 3 5 8 1 3
   ^i
10 8 4 3 5 7 1 3
     ^i
10 8 7 3 4 5 1 3
       ^i
10 8 7 5 3 4 1 3
...
于 2013-07-24T16:44:29.790 に答える