归并排序-Java实现

在极客时间学习时,又遇到了归并排序,这里给出Java的实现,附有注解,以备后面学习查看

private int[] sortArray(int[] waitDealArray) {
    if(waitDealArray == null) {
        return new int[0];
    }
    if(waitDealArray.length == 1) {
        return waitDealArray;
    }
    int middleIdx = waitDealArray.length / 2;
    // 将数组从中间分成左右两个,分而治之
    int[] leftArray = Arrays.copyOfRange(waitDealArray, 0, middleIdx);
    int[] rightArray = Arrays.copyOfRange(waitDealArray, middleIdx, waitDealArray.length);
    // 递归调用处理子问题
    leftArray = sortArray(leftArray);
    rightArray = sortArray(rightArray);
    // 合并子问题处理的结果
    int[] mergedArray = mergeArray(leftArray, rightArray);
    return mergedArray;
}

private int[] mergeArray(int[] leftArray, int[] rightArray) {
    if(leftArray == null) {
        leftArray = new int[0];
    }
    if(rightArray == null) {
        rightArray = new int[0];
    }
    int[] mergedArray = new int[leftArray.length + rightArray.length];
    int mi = 0, li = 0, ri = 0;
    // 用来合并两个有序数组内的数字
    while(li < leftArray.length && ri < rightArray.length) {
        if(leftArray[li] <= rightArray[ri]) {
            mergedArray[mi] = leftArray[li];
            li++;
        } else {
            mergedArray[mi] = rightArray[ri];
            ri++;
        }
        mi++;
    }
    // 如果某个数组还有剩余数字,直接放入合并数组即可
    if(li < leftArray.length) {
        for(int i = li; i < leftArray.length; i++) {
            mergedArray[mi] = leftArray[li];
            mi++;
        }
    }
    if(ri < rightArray.length) {
        for(int i = ri; i < rightArray.length; i++) {
            mergedArray[mi] = rightArray[i];
            mi++;
        }
    }
    return mergedArray;
}

写一个测试用例测试下:

/**
 * 测试归并排序操作
 */
@Test
public void testUnionSort() {
    int[] waitDealArray = {234, 12, 45, 2, 908, 111, 309, 103, 205, 9};
    int[] sortedArray = sortArray(waitDealArray);
    System.out.println(Arrays.toString(sortedArray));
}

打印结果:

[2, 9, 12, 45, 103, 111, 205, 234, 309, 908]
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一. 写在前面 要学习算法,“排序”是一个回避不了的重要话题,在分析完并查集算法和常用数据结构之后,今天我们终于可...
    Leesper阅读 7,315评论 0 40
  • 2018.03.20今日分享:今晚崇远做了语文、数学、英语、游泳训练、美术、学能训练等课程,我说崇远一晚上做了这么...
    幸福树328阅读 1,432评论 0 0
  • 所有男人都敢作敢当 所有女人都温柔如霜 冰河里鱼儿尽情游荡 九天外鸟儿自由翱翔 酒馆里永远熙熙攘攘 马路边青年放声...
    小小仲马阅读 1,607评论 2 1
  • react简介 react是由Fecebook开发的UI库,它的核心思想开发reactJS的组件可以重复调用,易于...
    小_b6d4阅读 3,339评论 0 0

友情链接更多精彩内容