Java 合并排序泛型方法
我的合并排序似乎工作不正常。当我显示排序后的列表时,它没有被排序,元素被添加,这里应该有9个,那里有49个。 有人知道我哪里出错了吗Java 合并排序泛型方法,java,sorting,mergesort,Java,Sorting,Mergesort,我的合并排序似乎工作不正常。当我显示排序后的列表时,它没有被排序,元素被添加,这里应该有9个,那里有49个。 有人知道我哪里出错了吗 public static <E extends Comparable<E>> void mergeSort(List<E> A) { int n = A.size(); if (n > 1) { int half = n / 2; List<E> B = cop
public static <E extends Comparable<E>> void mergeSort(List<E> A) {
int n = A.size();
if (n > 1) {
int half = n / 2;
List<E> B = copyPartialArray(A, 0, half);
List<E> C = copyPartialArray(A, half, n);
mergeSort(B);
mergeSort(C);
merge(B, C, A);
}
}
public static <E extends Comparable<E>> void merge(List<E> B, List<E> C, List<E> A) {
int n1 = B.size();
int n2 = C.size();
int i = 0;
int j = 0;
int k = 0;
while (i < n1 && j < n2) {
if (B.get(i).compareTo(C.get(j)) < 0) {
A.add(k, B.get(i));
i++;
}
else {
A.add(k, C.get(j));
j++;
}
k++;
}
if (i == n1)
for (int p = j; p < n2; p++) {
A.add(k, C.get(p)); k++;
}
else if (j == n2)
for (int p = i; p < n1; p++) {
A.add(k, B.get(p)); k++;
}
}
private static <E extends Comparable<E>> List<E> copyPartialArray(List<E> A, int first, int last) {
int n = last - first;
List<E> copy = new ArrayList<E>(n);
for (int i = 0; i < n; i++)
copy.add(i, A.get(first + i));
return copy;
}
公共静态无效合并排序(列表A){
int n=A.size();
如果(n>1){
int-half=n/2;
列表B=copyPartialArray(A,0,一半);
列表C=复制部分阵列(A,一半,n);
(B);
合并(C);
合并(B、C、A);
}
}
公共静态无效合并(列表B、列表C、列表A){
int n1=B.大小();
int n2=C.大小();
int i=0;
int j=0;
int k=0;
而(i
这个答案会让你意识到问题出在哪里
很明显,mergeSort不会对一个元素数组做任何事情,但是如果有两个元素(例如[2,1]),会发生什么呢?您提到在结果列表(列表A)中有比以前更多的元素。为什么?merge对那个列表做了什么 这个答案会让你意识到问题出在哪里 很明显,mergeSort不会对一个元素数组做任何事情,但是如果有两个元素(例如[2,1]),会发生什么呢?您提到在结果列表(列表A)中有比以前更多的元素。为什么?merge对那个列表做了什么