0
Для домашней работы CS, я пытаюсь использовать метод сортировки слияния для сортировки ArrayList. Вот мой код:Рекурсивный mergesort возвращает только первую половину ArrayList
public static LinkedList<Object> merge (LinkedList<Object> lsta, LinkedList<Object> lstb) {
LinkedList<Object> result = new LinkedList<Object>();
LinkedList<Object> lstaNew = (LinkedList<Object>) lsta.clone();
LinkedList<Object> lstbNew = (LinkedList<Object>) lstb.clone();
while(lstaNew.size()>0||lstaNew.size()>0) {
if(lstaNew.size()>0&&lstbNew.size()>0) {
if(((Comparable) lstaNew.getFirst()).compareTo(lstbNew.getFirst()) < 0) {
result.add(lstaNew.getFirst());
lstaNew.remove();
}
else {
result.add(lstbNew.getFirst());
lstbNew.remove();
}
}
else if(lstaNew.size()>0) {
result.add(lstaNew.getFirst());
lstaNew.remove();
}
else {
result.add(lstbNew.getFirst());
lstbNew.remove();
}
}
return result;
}
public static LinkedList<Object> sort (LinkedList<Object> lst) {
if (lst.size() <= 1) return lst;
LinkedList<Object> left = new LinkedList<Object>();
LinkedList<Object> right = new LinkedList<Object>();
int midpoint = lst.size()/2;
for (int i=0;i<midpoint;i++) left.add(lst.get(i));
for (int i=midpoint;i<lst.size();i++) right.add(lst.get(i));
return merge(sort(left),sort(right));
}
Однако в моих результатах я получаю только первую половину списка. Я просмотрел другие примеры сортировки слияния в Интернете, и мой код кажется похожим. Что я делаю не так? Было бы очень полезно оценить указатель в правильном направлении.