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; } }