设计思想是分治,具体实现思路,百度百科上有(上面的java代码很赞)
public static void main(String[] args) {
int[] arr = {1,20,2,19,3,18,4,5,17,6,7,16,8,9};
int[] result = sort(arr, 0, arr.length - 1);
List list = Lists.newArrayList();
for (int i : result) {
list.add(i);
}
System.out.println(list.stream().map(x -> String.valueOf(x)).collect(joining(",")));
}
/**
* Sorts array.
*/
@NonNull
public static int[] sort(@NonNull int[] arr, int l, int h) {
if (l == h) {
return new int[] {arr[l]};
}
int mid = (l + h) / 2;
int[] left = sort(arr, l, mid);
int[] right = sort(arr, mid + 1, h);
int[] tempArr = new int[left.length + right.length];
int m = 0, i = 0, j = 0;
while (i < left.length && j < right.length) {
tempArr[m++] = left[i] > right[j] ? right[j++] : left[i++];
}
while (i < left.length) {
tempArr[m++] = left[i++];
}
while (j < right.length) {
tempArr[m++] = right[j++];
}
return tempArr;
}
