Java MergeSort 归并排序例子,javamergesort,归并排序是建立在归并操作
分享于 点击 36973 次 点评:176
Java MergeSort 归并排序例子,javamergesort,归并排序是建立在归并操作
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。
归并排序
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}; }}
用户点评