【发布时间】:2014-02-21 14:37:00
【问题描述】:
我正在尝试实现我自己的 Mergesort 功能,但很难弄清楚什么不起作用。
UnSorted:[6, 1, 2, 7, 2, 3, 9, 7, 6] 的输出是Sorted:[2, 3, 6, 1, 2, 7]
这是我目前所拥有的:
public class mergeSort {
public static void main(String[] args) {
List<Integer> l = new ArrayList<Integer>();
Random rd = new Random();
for (int i = 1; i < 10; i++) {
l.add(rd.nextInt(10) + 1);
}
System.out.println("UnSorted: " + l);
msort(l);
System.out.println("Sorted: "+msort(l));
}
public static List<Integer> msort(List<Integer> l) {
if (l.size() <= 1) {
return l;
}
List<Integer> left = new ArrayList<Integer>();
List<Integer> right = new ArrayList<Integer>();
for (int i = 0; i < (l.size() / 2); i++) {
left.add(l.get(i));
}
for (int i = l.size() / 2; i < l.size(); i++) {
right.add(l.get(i));
}
msort(left);
msort(right);
//System.out.println(left + "" +right);
return join(left,right);
}
public static List<Integer> join(List<Integer> left, List<Integer> right) {
/*if (right.size() == 0) {
return left;
}
if (left.size() == 0) {
return right;
}*/
List<Integer> fin = new ArrayList<Integer>();
// pointers
int lp = 0, rp = 0, fp = 0;
while (lp < left.size() && rp < right.size()) {
if (left.get(lp) < right.get(rp)) {
fin.add(left.get(lp));
lp++;
} else {
fin.add(right.get(rp));
rp++;
}
fp++;
}
return fin;
}
}
【问题讨论】: