我需要实现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