0

// 誤って作成したバブルソートの奇妙なバリエーション。通常の if a[j] >a[j+1] を誤って省略しましたが、コードは完全に機能していました。通常のバブルソートよりもこの種のバブルソートを使用する利点はありますか。

public int[] bubbleSort(int[] a)
{
    for (int i = 0; i < a.length - 1; i++)
    {
        for (int j = i + 1; j < a.length - 1; j++)
        {
            if (a[i] > a[j])
            {
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;

            }
        }
    }
    return a;
}
4

1 に答える 1

3

外側のループの最初の繰り返しの終わりに、配列の最初の値が必ず配列の最小値になることに注意してください (理由がわかりますか?)。2 回目の繰り返しの後、2 番目の値は 2 番目に小さい値になります。 3 回目の繰り返しの後、3 番目の値は 3 番目に小さい値になります。

(そうは言っても、あなたのロジックにはバグがあると思います。上限は ではなく でjある必要があります。そうしないと、配列の最後の値が他の値と比較されたり、移動されたりしないためです。)a.lengtha.length - 1

配列内の最小値を前に移動し、次に 2 番目に小さい値などを移動することで機能するselection sortを調べることをお勧めします。あなたが思いついたアルゴリズムは、(本質的に) 選択ソートの修正版です。修正されたバブルソートよりも。

お役に立てれば!

于 2013-10-28T21:04:57.343 に答える