package algorithm;
import java.util.ArrayList;
import java.util.List;
public class mergemy {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(99);
list.add(98);
list.add(99);
list.add(100);
list.add(50);
list.add(33);
list.add(22);
System.out.println(mergesort(list).toString());
}
public static List<Integer> mergesort(List<Integer> list) {
if (list.size() < 2) {
return list;
}
return merge(mergesort(list.subList(0, list.size() / 2)), mergesort(list.subList(list.size() / 2, list.size())));
}
public static List<Integer> merge(List<Integer> left, List<Integer> right) {
List<Integer> result = new ArrayList<Integer>();
int j = 0;
for (int i = 0; i < left.size(); i++) {
Integer valueLeft = left.get(i);
for (; j < right.size();) {
Integer valueRight = right.get(j);
if (valueLeft <= valueRight) {
result.add(valueLeft); //左值小,加入左值,然后获取一个新的左值来比较;
break;
}else {
result.add(valueRight); //右值小,加入右值,然后获取一个新的右值来比较;
j++;
continue;
}
}
if (j >= right.size()) {
result.add(valueLeft); //右值比完了,直接放入左值;
}
}
for (;j<right.size();j++) {
//右值还没有比完,加入右值
result.add(right.get(j));
}
return result;
}
}