练手之 合并排序

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;
 }
}
原文地址:https://www.cnblogs.com/unixshell/p/3305840.html