0

私は配列を持っていて、挿入ソートを使用してそれらをソートする必要があります。compareTo メソッドを使用して配列を実行し、より大きなものを確認しようとしました。明らかに機能しない文字列で配列インデックスを参照しようとしていたため、問題が発生しました(これはcompareTo(a [key])にあります)。

これを行う方法に関する提案やヒントをいただければ幸いです。

これは私がこれまでに持っているものです。それは良いスタートですか?または正しい方向へのスタート?

 public void insertionSort() 
    { 
        insertionSort(a.length-1);
    } 



    private void insertionSort(int n)
    {
        String temp; 
        if(n <= 1)
        {
        //Do nothing, easiest case
        }

        else
        {
        for(int i = 1; i < a.length; i++)
        {
        int j;
        String key = a[i];

            while((j >= 0) && (a[i].compareTo(a[key]) > 0))
            {
            a[i+1] = a[i];
            j--;
            }
            a[i+1] = key;
        }   

        insertionSort(n-1);

        }
    } 
4

3 に答える 3

1

私の最初の提案は、必要な引数を渡すと、通常はメソッドを理解しやすくなるということです。何が何であるかはまったく明らかではありませんainsertionSortpublicメソッドは、並べ替えるオブジェクトを引数として受け取ると思います。(これを独自のリストのようなクラスで定義している場合、それほど悪くはないと思いますが、それが使用法であるようには聞こえません)。

同様に、何nが想定されているのか完全にはわかりませんが(おそらく、それを超えてソートされていることがわかっているインデックス)、プライベートメソッドの本体ではまったく使用しないため、同じことをn何度も行っています.

の要素を交換しているようにも見えますがa、これは挿入ソートで行う必要はありません。これはバブルソートのように見えます。

最初にメソッドを疑似コード (コメントなど) として記述してアプローチをレイアウトし、次に各コメントを小さなコードで具体化してみてください。これを行うことで、細部に行き詰まるのを避けることができ、通常、概念的な間違いがより明白になり、回避しやすくなります。これは次のようになります。

public static int[] insertionSort(int[] input) {
    // Create the array to hold the results

    // Iterate through the contents of input and insert each one into
    // the result array in order (method call here)

    // return the result array
}

private void insertOneElement(int toInsert, int[] resultArray) {
    // Compare toInsert with first element of resultArray

    // etc.
}
于 2011-09-28T16:06:48.647 に答える
0

に変更するだけです(ではなくa[j].compareTo(key)を比較したいことに注意してください)。smas がコメントしたように、初期化も必要です。a[j]a[i]j

于 2011-09-28T16:04:38.367 に答える
0

内側のループを次のように置き換えます。

j = i - 1;  //initialize j!!!
String key = a[i];   //take value
while((j >= 0) && (a[j].compareTo(key) > 0)){//Compare with key!!!
     a[j+1] = a[j];
     j--;
}
a[j + 1] = key; //index is j here!!!!
于 2011-09-28T16:09:43.557 に答える