代码:
package com.demo.thinking;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MergeSort {
public static void main(String[] args) {
List<Integer> integers = Arrays.asList(2, 3, 5, 8, 4, 11, 1, 7, 6, 9, 10);
// List<Integer> integers = Arrays.asList(0);
List<Integer> integers1 = mergeSort(integers, 0, integers.size() - 1);
System.out.println(integers1);
}
//转载请标明链接:https://blog.csdn.net/wabiaozia/article/details/107397641
public static List<Integer> mergeSort(List<Integer> integers, Integer start, Integer end) {
//结束条件
if (start == end) {
return Arrays.asList(integers.get(start));
}
// 中间值
Integer min = start + (end - start) / 2;
System.out.println(min);
List<Integer> leftList = mergeSort(integers, start, min);
List<Integer> rightList = mergeSort(integers, min + 1, end);
ArrayList<Integer> resultList = new ArrayList<>();
int i = 0, j = 0;
while (i < leftList.size() && j < rightList.size()) {
// 比较leftList的第i和rightList的第j个值,哪个小就放进resultList。
// 如 leftList[20,26,27] resultList[21,28,29] 见图1
Integer ii = leftList.get(i) < rightList.get(j) ? leftList.get(i++) : rightList.get(j++);
resultList.add(ii);
}
// 判断leftList或rightList是否还有值没有加入到resultList
// 如果右边还有值,直接加入到resultList。 见图1最后一行
while (j < rightList.size()) {
resultList.add(rightList.get(j++));
}
// 如果左边还有值
while (i < leftList.size()) {
resultList.add(leftList.get(i++));
}
return resultList;
}
}
图:
![](https://i-blog.csdnimg.cn/blog_migrate/b1f8cf20919a2938f237625b7203e238.png)