0

Javaでのこのクイックソートアルゴリズムの実装の何が問題になっているのか説明できますか?

static ArrayList<Integer> quickSort(ArrayList<Integer> array){

    if (array.size() <=1){
        ArrayList<Integer> a = new ArrayList<Integer>();

        return a;
    }

    int pivotIndex = array.size() / 2;

    int pivot = array.get(pivotIndex);
    ArrayList<Integer> left= new ArrayList<Integer>();
    ArrayList<Integer> right = new ArrayList<Integer>();

    for (int i = 0; i < array.size(); i++) {
        if (i!=pivotIndex){
        if (array.get(i) > pivot)
            right.add(array.get(i));
        else
            left.add(array.get(i));
        }

    }
    ArrayList<Integer> l = new ArrayList<Integer>();
    l.addAll(quickSort(left));
     l.add(pivot);
     l.addAll(quickSort(right)); 

    return l;

}
4

3 に答える 3

3

明白なエラーの1つは、サイズ1の配列が正しく処理されないことです。これは再帰の基本ケースの1つであるため、これを正しく行うことが重要です。

于 2012-11-17T17:26:55.790 に答える
3

それ以外の

if (array.size() <=1) {
    ArrayList<Integer> a = new ArrayList<Integer>();

    return a;
}

使用する

   if (array.size() <=1){
   return array
}
于 2012-11-17T17:40:06.163 に答える
1

このアルゴリズムの主な問題は、関数の呼び出しごとに新しい ArrayLists を作成していることです。このようにして、QuickSort の最も優れた点であるメモリを追加せずにその場で並べ替えることができなくなります。最初に指定された配列のみを操作するようにしてください。

于 2012-11-17T17:49:10.120 に答える