此代碼的輸出始終是輸入的最後一位數字。 找不到原因。我使用遞歸合併排序,結果是錯誤的。我想也許這個名單被重疊。合併排序列表java
public class MergeSort {
public static List<Integer> Sort(List<Integer> list) {
if (list.size() <= 1) {
return list;
}
List<Integer> aList = new ArrayList<Integer>();
aList = list.subList(0, list.size()/2);
List<Integer> bList = new ArrayList<Integer>();
bList = list.subList(list.size()/2, list.size());
Sort(aList);
Sort(bList);
merge(aList, bList, list);
return list;
}
private static List<Integer> merge(List<Integer> alist,
List<Integer> blist, List<Integer> list) {
int alistIndex = 0, blistIndex = 0, listIndex = 0;
while (alistIndex < alist.size() && blistIndex < blist.size()) {
if (alist.get(alistIndex) < blist.get(blistIndex)) {
list.set(listIndex, alist.get(alistIndex));
alistIndex++;
} else {
list.set(listIndex, blist.get(blistIndex));
blistIndex++;
}
listIndex++;
}
List<Integer> rest;
if (alistIndex == alist.size()) {
rest = blist.subList(blistIndex, blist.size());
for(int c = blistIndex; c < rest.size(); c++){
list.set(listIndex, blist.get(c));
listIndex++;
}
} else {
rest = alist.subList(alistIndex, alist.size());
for(int c = alistIndex; c < rest.size(); c++){
list.set(listIndex, alist.get(c));
listIndex++;
}
}
return list;
}
}
測試輸入是5,4,3,2,1。 但輸出爲1,1,1,1,1 因此,必須有一些錯這個合併方法
你用調試器通過你的代碼? –
你應該使用一個調試器,並可能在每一步打印排序列表的內容來檢查輸出。 – SebastianGreen