我需要實現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;
}
編輯添加:這是我正在使用的主要方法(我不能改變)的一個片段。
String[] b = {"S", "O", "R", "T", "E", "X", "A", "M", "P", "L", "E"};
mergesort(b);
assert isSorted(b);
show(b);
相信我,合併排序實際上排序。 – xenteros
我敢肯定,但這個實現並沒有實際的排序。這就是我所問的。 – Kendra
由於歸併排序是無效的,你總是拋出結果遠 – Turo