归并排序

本文详细介绍了一种高效的排序算法——归并排序。通过递归地将数组拆分成更小的部分,再将这些部分按顺序合并来实现排序。文章提供了具体的实现代码,展示了如何使用临时数组进行元素比较与合并。

排序算法

归并算法

给一组无序数组,我们先将它拆分,拆分到最小,然后再两两归并,按照顺序两两归并,最终得到一个有序数组

主要步骤:
- 拍序,通过把其拆分成很小的单元,然后再拍序;
- 连接

void Merge(int* TR2, int* TR1, int start, int m, int end)
{
    int i=start;
    int j=start+m;
    int k=start;
    while(i<=m && j<=end)
    {
        if(TR2[i]<TR2[j])
            TR1[k++]=TR2[i++];
        else
            TR1[k++]=TR2[j++];
    }
    if(i<=m)
    {
        for(int l=0; l<=m-i; ++l)
            TR1[k+l]=TR2[i+l];
    }
    if(j<=m)
    {
        for (int l=0; l<=end-j; ++l)
            TR1[k+l]=TR2[j+l];
    }
}

void Msort(int* SR, int* TR1, int start, int end, int length)
{
    int* TR2=new int[length];
    if(start==end)
        TR1[start]=SR[start];
    else
    {
        int m=(start+end)/2;//将无序数组一分为二
        Msort(SR, TR2, start, m, m-start+1);
        Msort(SR, TR2, m+1, end, end-m);
        Merge(TR2, TR1, start, m, end);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值