java实现的归并排序(java)

来源:互联网 发布:帝国整站源码 编辑:程序博客网 时间:2024/06/05 03:04
public class MergerSortor {public static void main(String[] args) {int[] a = new int[] { 8, 9, 3 };System.out.println("排序前得数组: " + Arrays.toString(a));System.out.println("排序后得数组: " + Arrays.toString(MergerSortor.mergerSort(a)));}/** * 对数组进行归并排序 *  * @param * @param arr */public static int[] mergerSort(int[] arr) {return mergeSort(arr, 0, arr.length - 1);}/** * 重载方法 *  * @param dest 目标数组 * @param src  源数组 * @param low  开始索引 * @param high 结束索引 */public static int[] mergeSort(int[] src, int lowIndex, int highIndex) {  // 当元素只有一个的时候, 直接返回.(分治思想中的问题的求解,相当递归结束条件)if (highIndex == lowIndex) { return null;} else {// 将原问题分解为n个小问题int middleIndex = (lowIndex + highIndex) >> 1;// 合并问题的解mergeSort(src, lowIndex, middleIndex);// 对左半部分进行排序mergeSort(src, middleIndex + 1, highIndex);// 对有半部分进行排序merge(src, lowIndex, middleIndex, highIndex);// 合并左右有序部分return src;}}/** * 归并已经排序好的数组 *  * @param * @param src * @param low * @param mid * @param high * @param desc */public static void merge(int[] src, int startIndex, int middleIndex, int endIndex) {int[] dest = new int[endIndex - startIndex + 1];int leftIndex = startIndex; // 待合并左边部分的起始索引int rightIndex = middleIndex + 1; // 待合并右边部分的起始索引int destIndex = 0; // 目标数组起始索引while (leftIndex <= middleIndex && rightIndex <= endIndex) {if (src[leftIndex] < src[rightIndex]) {dest[destIndex++] = src[leftIndex++];} else {dest[destIndex++] = src[rightIndex++];}}while (leftIndex <= middleIndex) {dest[destIndex++] = src[leftIndex++];}while (rightIndex <= endIndex) {dest[destIndex++] = src[rightIndex++];}System.arraycopy(dest, 0, src, startIndex, dest.length);}}


0 0
原创粉丝点击