前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法导论-归并排序

算法导论-归并排序

作者头像
yiduwangkai
发布2019-09-17 15:44:23
4140
发布2019-09-17 15:44:23
举报
文章被收录于专栏:大数据进阶

第二章第一节插入排序

插入排序又是增量排序

算法如下:

代码语言:javascript
复制
/** 
 * 归并排序 
 * 简介:将两个(或两个以上)有序表合并成一个新的有序表 即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列 
 * 时间复杂度为O(nlogn) 
 * 稳定排序方式 
 * @param nums 待排序数组 
 * @return 输出有序数组 
 */  
public static int[] sort(int[] nums, int low, int high) {  
    int mid = (low + high) / 2;  
    if (low < high) {  
        // 左边  
        sort(nums, low, mid);  
        // 右边  
        sort(nums, mid + 1, high);  
        // 左右归并  
        merge(nums, low, mid, high);  
    }  
    return nums;  
}
代码语言:javascript
复制
public static void merge(int[] nums, int low, int mid, int high) {  
    int[] temp = new int[high - low + 1];  
    int i = low;// 左指针  
    int j = mid + 1;// 右指针  
    int k = 0;
    // 把较小的数先移到新数组中  
    while (i <= mid && j <= high) {  
        if (nums[i] < nums[j]) {  
            temp[k++] = nums[i++];  
        } else {  
            temp[k++] = nums[j++];  
        }  
    }
    // 把左边剩余的数移入数组  
    while (i <= mid) {  
        temp[k++] = nums[i++];  
    }
    // 把右边边剩余的数移入数组  
    while (j <= high) {  
        temp[k++] = nums[j++];  
    }
    // 把新数组中的数覆盖nums数组  
    for (int k2 = 0; k2 < temp.length; k2++) {  
        nums[k2 + low] = temp[k2];  
    }  
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档