- package Bruce;
- public class Test {
- public static void main(String[] args) {
- int[] a = {9, 1, 8, 0, 5, 10, 7, 3, 2, 6, 4};
- int[] b = mergeSort(a);
- for (int i = 0; i < b.length; i++) {
- System.out.print(b[i] + " ");
- }
- }
- private static int[] mergeSort(int[] a) {
- int[][] resArr = splitArray(a);
- return mergeSort(resArr[0], resArr[1]);
- }
- private static int[] mergeSort(int[] left, int[] right) {
- if (left.length >= 2) {
- int[][] temArr = splitArray(left);
- left = mergeSort(temArr[0], temArr[1]);
- if (right.length >= 2) {
- temArr = splitArray(right);
- right = mergeSort(temArr[0], temArr[1]);
- }
- }
- int[] resArr = new int[left.length + right.length];
- for (int i = 0, l = 0, r = 0; i < resArr.length; i++) {
- if (right.length == r || left.length > l && left[l] < right[r]) { //将最右边的小于号换成大于号可使得排序由大到小排列
- resArr[i] = left[l++];
- }else {
- resArr[i] = right[r++];
- }
- }
- return resArr;
- }
- private static int[][] splitArray(int[] a) {
- assert(a != null && a.length > 1);
- int maxLen = (a.length + 1) >> 1;
- int minLen = a.length >> 1;
- int[] left = new int[maxLen], right = new int[minLen];
- for (int i = 0; i < maxLen; i++) {
- left[i] = a[i];
- }
- for (int i = 0; i < minLen; i++) {
- right[i] = a[i + maxLen];
- }
- return new int[][]{left, right};
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/081020136285.html
来源: http://www.codesnippet.cn/detail/081020136285.html