算法 排序算法之归并排序

归并排序是一种采用分治法的排序算法,通过不断将两个有序子数组合并,最终得到完整的有序数组。以数组{50,10,90,30,70,40,80,60,20}为例,详细阐述了排序过程,并提供了Java代码实现。该算法的时间复杂度为O(nlog2n),空间复杂度为O(n),具备稳定性,但空间占用较高。" 112605989,10547488,Matlab二维画图教程:从基础到美化,"['Matlab', '数据可视化', '图形绘制', '曲线图', '子图']
摘要由CSDN通过智能技术生成

归并排序

归并排序主要是二路归并排序

基本思想

  • 设数组a中存放了n个数据元素
  • 初始时把它们看成n个长度为1的有序子数组,然后从第一个子数组开始,把相邻子数组两两合并,得到n/2的整数上界个长度为2的新的有序子数组(当n为奇数时最后一个新的有序子数组的长度为1)
  • 对这些新的有序子数组再两两合并,直到最后长度为n的有序数组位置

排序过程

这里写图片描述

以数组{50,10,90,30,70,40,80,60,20}为例

这里写图片描述

代码实现

  void Merge(DataType a[], int n, DataType swap[], int k) {
        /*k为有序子数组的长度,一次二路归并排序后的有序子序列放在数组swap中*/
        int m = 0, u1, l2, i, j, u2;

        /*第一个有序子数组下界为0*/
        int l1 = 0;
        while (l1 + k <= n - 1) {
            l2 = l1 + k;//计算第二个有序子数组下界
            u1 = l2 - 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值