-1

私は、再帰を使用して選択ソートとバブルソートに取り組んできました。私は最終的に2つの方法を思いつきましたが、それらは完全にうまくいきました。しかし、それらを最終的に見てみると、それらはただ 1 つのメソッドのように見えますselectionSortRecursive。違いを教えていただけますか(または同じですか)?

public static void selectionSortRecursive(Comparable[] list, int n)
{
    Comparable temp;
    if ( n > 1 ){

        for ( int i = 0; i < n - 1; i++ )
        {
            if(list[i].compareTo(list[i + 1]) > 0){
                temp = list[i];
                list[i] = list[i + 1];
                list[i + 1] = temp;
            }
        }

            selectionSortRecursive(list, n - 1);
       }
 }

public static void bubbleSortRecursive( Comparable[] list, int n) 
{
    Comparable tmp;
    if (n >1) {
        for (int i = 0; i < n - 1; i++)
        {
            if(list[i+1].compareTo(list[i]) < 0)
            {
                tmp = list[i];
                list[i] = list[i+1]; 
                list[i+1] = tmp;
            }
        }
        bubbleSortRecursive( list, n - 1);
    }

}
4

2 に答える 2

4

異なる唯一の行は

 if(list[i].compareTo(list[i + 1]) > 0){

 if(list[i+1].compareTo(list[i]) < 0)

そして、compareTo が正しく実装されていれば、これは同じことを行います。

ところで、if(n > 1)チェックは冗長です。そして、私はtmpあなたができる最も内側のスコープに移動します.

どちらのソートもバブルソートです。バブルソートは、値を上/右の位置に「バブル」します。

選択ソートは、最小値/最大値を繰り返し選択し、選択した値を配置する必要のある位置に入れ替えます。つまり、スワップはループの外側にあり、最低/最高を見つけます。

于 2013-11-03T20:46:20.213 に答える