0

ソートクラスを配列リストを使用してオブジェクトをソートするように変換するのに問題があります。現在、オブジェクトを並べ替えていますが、配列リストの並べ替えに変換するのに問題があります。コードは次のとおりです。

package Merge_Sort_Objects_ArrayList;
import java.util.ArrayList;
public class mergesort {

    /**
     * Merges two sorted portion of items array
     * pre: items[start.mid] is sorted.  items[mid+1.end] sorted.  start <= mid <= end
     * post: items[start.end] is sorted
     */

    private static void merge(ArrayList <Comparable> items, int start, int mid, int end){
            Comparable temp;
            int pos1 = start;
            int pos2 = mid + 1;
            int spot = start;
            ArrayList <Comparable> objectSort = items;

            while (!(pos1 > mid && pos2 > end)){
                if ((pos1 > mid) || ((pos2 <= end) &&(items[pos2].getRadius() < items[pos1].getRadius()))){
                    temp[spot] = items[pos2];
                    pos2 +=1;
                }else{
                    temp[spot] = items[pos1];
                    pos1 += 1;
                }
                spot += 1;
            }
            /* copy values from temp back to items */

            for (int i = start;  i <= end; i++){
                items[i] = temp[i];
            }
    }

    /**
     * mergesort items[start..end]
     * pre: start > 0, end > 0
     * post: items[start..end] is sorted low to high
     */
    public static void mergesort(ArrayList <Comparable> items, int start, int end){
        if (start < end){
            int mid = (start + end) / 2;
            mergesort(items, start, mid);
            mergesort(items, mid + 1, end);
            merge(items, start, mid, end);
        }
    }
}

今、私はそれを変換し始めました、しかし私はここでこのセクションで立ち往生しています:

  while (!(pos1 > mid && pos2 > end)){
            if ((pos1 > mid) || ((pos2 <= end) &&(items[pos2].getRadius() < items[pos1].getRadius()))){
                temp[spot] = items[pos2];
                pos2 +=1;
            }else{
                temp[spot] = items[pos1];
                pos1 += 1;
            }
            spot += 1;
        }
        /* copy values from temp back to items */

        for (int i = start;  i <= end; i++){
            items[i] = temp[i];
        }

前もって感謝します!

4

2 に答える 2

1

その事実を使用してください

Foo[] array = ......;
Foo rhs = .....;
Foo lhs;
array[i] = rhs;
lhs = array[j];

に類似しています:

ArrayList<Foo> list = .....;
Foo rhs = ......;
Foo lhs;
list.set(i, rhs);
lhs = list.get(i);
于 2012-05-31T03:36:39.007 に答える
0

練習用でない場合は、ArrayListをソートするためのCollectionssortメソッドを参照してください。

于 2012-05-31T13:27:23.467 に答える