내 매개 변수에 대한 배열만을 사용하여 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
mergesort는 무효이므로 항상 결과를 – Turo