首页 > 编程语言 > 详细

排序算法-归并排序

时间:2021-08-13 17:36:36      阅读:56      评论:0      收藏:0      [点我收藏+]

复杂度

时间复杂度(平均) 时间复杂度(最好) 时间复杂度(最坏) 空间复杂度 稳定性 复杂性
O(nlog2n) O(nlog2n) O(nlog2n) O(n) 稳定 较复杂

思路

  1. 采用分治思想,先"分"再"治"
  2. 分的过程即将数组分成若干个子部分,子部分最少数组元素为1
  3. 治的过程即将子部分进行合并,两两合并到一组
  4. 最终治到一组时排序结束

代码:

 public int[] mergeSort_1(int[] nums, int l, int r){

    if(l == r) return new int[]{nums[l]};//当分到子数组元素个数为1时返回该元素数组

    int mid = (l + r) / 2;

    int[] lArr = mergeSort_1(nums, l, mid);//左分
    int[] rArr = mergeSort_1(nums, mid + 1, r);//右分
    int[] merge = new int[r - l + 1];//合治数组

    //合治 i,j,k分别处理lArr,rArr与merge的下标
    int i = 0, j = 0, k = 0;
    while(i < lArr.length && j < rArr.length){
        if(lArr[i] < rArr[j]) merge[k++] = lArr[i++];
        else merge[k++] = rArr[j++];
    }
    while(i < lArr.length){
        merge[k++] = lArr[i++];
    }
    while(j < rArr.length){
        merge[k++] = rArr[j++];
    }
    return merge;
}

排序算法-归并排序

原文:https://www.cnblogs.com/jingqz/p/15137392.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!