0

quick sortforを書こうとしていStringsます。コードを書きましたが、プログラムを実行すると機能します。配列を正常にソートできます。0 - (x - 1)クイック ソートを適用する場合は、配列をとから分離します(x + 1) - y。ここで、x はピボット位置、y は配列の末尾です。配列の最後のエントリをピボットとして継続的に使用するのではなく、メイン メソッドで独自のピボットを選択できるようにしたいと考えています。

問題は、これを適用する方法が思いつかないことです。クイックソートの呼び出しを に編集しquicksort(blah, 0, pivot_position)、クイックソートメソッドを に編集しようとしましたquicksort(list, q + 1, list.length - 1)。実行されますが、ソートされていません。これを理解するための助けを得ることができますか? ありがとうございました。

*また、これはすべてターミナルを介して実行されます。

public static void quicksort(String[] list, int p, int r)
{
    if(p < r)
    {
        int q = partition(list, p, r);
        quicksort(list, p, q - 1);
        quicksort(list, q + 1, r); //quicksort(list, q + 1, list.length - 1)
    }
}
public static int partition(String[] list, int p, int r)
{
    String x = list[r];
    int i = p - 1;
    for(int j = p; j <= r - 1; j++)
    {
        if(list[j].compareTo(x) <= 0)
        {
            i++;
            swap(list, i, j);
        }
    }
    swap(list, i + 1, r);
    return i + 1;   
}
public static void main(String[] args)
{
    int pivot_position = Integer.parseInt(args[1]);
    String[] blah = [a, zy, o, z, je];
    quicksort(blah, 0, blah.length - 1); // quicksort(blah, 0, pivot_position)
    for(String i : blah)
    {
        System.out.println(i);
    }
}
4

0 に答える 0