我有一个类可以对通用列表进行一些递归合并排序,只要元素实现 Comparable。我有一个名为 mergeSort(List toSort) 的 void 方法和一个方法 mergeSortedLists(List left, List right),它采用两个已经排序的列表,然后将它们组合成一个排序列表。问题是,mergeSort(...) 方法似乎没有操纵 toSort 变量。是的,但是在它跃升一个级别后不会显示更改。以下是排序方法:
public static <E extends Comparable<E>> void mergeSort(List<E> toSort)
{
if(toSort.size() > 1)
{
List<E> temp = toSort.subList(0, toSort.size()/2);
ArrayList<E> left = new ArrayList<E>(0);
for(E e : temp) left.add(e);
temp = toSort.subList(toSort.size()/2, toSort.size());
ArrayList<E> right = new ArrayList<E>(0);
for(E e : temp) right.add(e);
if(right.size() != 1) mergeSort(right);
if(left.size() != 1) mergeSort(left);
toSort = mergeSortedLists(left, right);
}
}
public static <E extends Comparable<E>> List<E> mergeSortedLists(List<E> leftList, List<E> rightList)
{
ArrayList<E> list = new ArrayList<E>();
while(!leftList.isEmpty() && !rightList.isEmpty())
{
if((leftList.get(0)).compareTo(rightList.get(0)) <= 0)
list.add(leftList.remove(0));
else
list.add(rightList.remove(0));
}
while(!leftList.isEmpty())
list.add(leftList.remove(0));
while(!rightList.isEmpty())
list.add(rightList.remove(0));
return list;
}
我通常有用于错误检查的打印语句,这些语句表明 mergeSortedLists(...) 正确排序并返回正确的列表。然后,我将 mergeSort(...) 中的 toSort 变量分配给 mergeSortedLists(...) 返回的任何内容。该任务有效。现在,它跳回一个级别以将该列表与不同的列表组合在一起,并且更改似乎丢失了。我不知道发生了什么。