0

バブルソートを作成しましたが、配列を印刷するとソートされますが、最大の番号から始まり、最小の番号で終了します。

public int[] BubbleSort(int[] unsortedArray)
{
    for(int i = 0; i < unsortedArray.Length; i++)
        for(int j = 0; j < unsortedArray.Length; j++)
            if(unsortedArray[i] < unsortedArray[j])
            {
                int temp = unsortedArray[i];
                unsortedArray[i] = unsortedArray[j];
                unsortedArray[j] = temp;
            }
    return unsortedArray;
}

リストが逆になっている理由を誰か説明できますか?

編集:申し訳ありませんが、間違ったコードを貼り付けました。

行が if(unsortedArray[i] < unsortedArray[j]) を読み取ると、リストは下から上に並べられますが、これは論理的に意味がありません。i が j より小さい場合、それらを交換します。

4

4 に答える 4

2

おそらく次のように優れています:

public int[] BubbleSort(int[] unsortedArray)
{
    return unsortedArray.OrderBy(x=>x).ToArray();
}

iオリジナルにはいくつかの問題があり、j繰り返しが多すぎますが、それでも機能しますが、結果に影響を与えない不必要な繰り返しを行っています。また、条件unsortedArray[i] < unsortedArray[j]が逆でした。

public int[] BubbleSort(int[] unsortedArray)
{
    for(int i = 0; i < unsortedArray.Length-1; i++)
        for(int j = i+1; j < unsortedArray.Length; j++)
            if(unsortedArray[i] > unsortedArray[j])
            {
                int temp = unsortedArray[i];
                unsortedArray[i] = unsortedArray[j];
                unsortedArray[j] = temp;
            }
    return unsortedArray;
}

最適化されたバブル ソート:

public int[] BubbleSort(int[] unsortedArray)
{
    var n=unsortedArray.Length;
    while(n>0)
    {
        var newn=0;
        for(var i=1;i<=n-1;i++)
        {
            if(unsortedArray[i-1]>unsortedArray[i])
            {
                var temp = unsortedArray[i];
                unsortedArray[i] = unsortedArray[i-1];
                unsortedArray[i-1] = temp;
                newn=i;
            }
        }
        n=newn;
    }
}
于 2013-08-07T19:44:06.253 に答える
1

それはこの条件付きです

if(unsortedArray[i] < unsortedArray[j])

そのはず

if(unsortedArray[j] < unsortedArray[i])

編集: 編集に回答します。

unsortedArray[i]内側のループが実行された後、要素の値が最小になるようにします。つまり、 に遭遇した場合にのみ切り替えることを意味します。これはunsortedArray[j]、 にある現在の値よりも小さいですunsortedArray[i]

がすでに低い値である場合unsortedArray[i]は、そのままにしておきます。

于 2013-08-07T19:38:24.130 に答える
0

あなたの比較

 if(unsortedArray[i] < unsortedArray[j])

する必要があります

 if(unsortedArray[i] > unsortedArray[j])
于 2013-08-07T19:38:58.683 に答える