私のパラメータには配列だけを使ってmergesortを実装する必要があります。私はそれがそれを分割して再組み立てしているのを見ることができますが、そうしている間にそれを実際にソートしているわけではありません。私はそれがどこで/どのように物事を呼び出すかと関係していると確信しています。私はそれを修正することができますので、正しいデータをピックアップしていない場所を指摘することができますか?実際にソートされていないMergesort
public static void mergesort(Comparable[] a) {
a = mergeSort(a);
}
public static Comparable[] mergeSort(Comparable[] a) {
Comparable[] first, second;
int length1 = a.length/2;
int length2 = a.length - length1;
first = Arrays.copyOfRange(a, 0, length1);
second = Arrays.copyOfRange(a, length1, a.length);
if(length1 > 0 && length2 > 0) {
first = mergeSort(first);
System.out.print("First: ");
show(first);
second = mergeSort(second);
System.out.print("Second: ");
show(second);
a = merge(first, second);
System.out.print("\nAfter: ");
show(a);
}
return a;
}
public static Comparable[] merge(Comparable[] a, Comparable[] b) {
Comparable[] temp = new Comparable[a.length + b.length];
int aFirst = 0, aLast = a.length - 1;
int bFirst = 0, bLast = b.length - 1;
int index = aFirst;
while(aFirst <= aLast && bFirst <= bLast) {
if(a[aFirst].compareTo(b[bFirst]) < 0) {
temp[index] = a[aFirst++];
} else {
temp[index] = b[bFirst++];
}
index++;
}
while(aFirst <= aLast) {
temp[index] = a[aFirst++];
index++;
}
while(bFirst <= bLast) {
temp[index] = b[bFirst++];
index++;
}
return temp;
}
追加する編集:ここで私は(とされ、私は変更することはできません)で働いていmainメソッドからの抜粋です。
String[] b = {"S", "O", "R", "T", "E", "X", "A", "M", "P", "L", "E"};
mergesort(b);
assert isSorted(b);
show(b);
私を信頼し、ソートを実際にソートします。 – xenteros
私はそれがそうだと確信していますが、この実装は実際にソートされていません。それが私が求めていることです。 – Kendra
mergesortは無効なので、結果は常に – Turo