欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java MergeSort 归并排序例子,javamergesort,归并排序是建立在归并操作

来源: javaer 分享于  点击 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};    }}
相关栏目:

用户点评