归并排序算法之Java实现

来源:互联网 发布:python 书籍推荐 编辑:程序博客网 时间:2024/06/01 07:39

归并排序的基本思想完全遵循分治模式:

分解:分解待排序的n个元素的序列成各具n/2个元素的两个子序列。

解决:使用归并排序递归的排序两个子序列。

合并:合并两个已排序的子序列以产生已排序的答案。

Java代码实现此算法如下:

public static void mergeSort(int[] arr, int lo, int hi) {        if ( lo < hi - 1 ) {            int mi = ( lo + hi ) / 2;            mergeSort( arr, lo, mi );            mergeSort( arr, mi, hi );            merge( arr, lo, mi, hi);        }    }    public static void merge(int[] arr, int lo, int mi, int hi) {        int frontLength = mi - lo;        int backLength = hi - mi;        int[] l = new int[frontLength + 1];        int[] r = new int[backLength + 1];        for (int i = 0; i < frontLength; i++)            l[i] = arr[lo + i];        for (int i = 0; i < backLength; i++)            r[i] = arr[mi + i];        l[frontLength] = Integer.MAX_VALUE;        r[backLength] = Integer.MAX_VALUE;        int lp = 0;        int rp = 0;        for (int i = lo; i < hi; i++) {            if (l[lp] < r[rp]) {                arr[i] = l[lp];                lp++;            } else {                arr[i] = r[rp];                rp++;            }        }    }
0 0