C++实现并规排序

14 篇文章 0 订阅

首先实现Sort.h文件,里面有MergeSort类的定义和实现:

#include<stdlib.h> 

template <typename T>   class   MergeSort
{
    private:
    void    Merge(T *data,T *tmp,int L,int R,int Rend)
    {
            int Lend = R-1;
            int tmpL = L;
            int l,r,p;
            l = L;
            r = R;
            p = L;
            while(l<=Lend && r <= Rend){
                if(data[l]<data[r])
                    tmp[p++] = data[l++];
                else
                    tmp[p++] = data[r++];
            }
            while(l<=Lend)
                tmp[p++] = data[l++];//左边剩下的
            while(r<=Rend) {
                tmp[p++] = data[r++];//右边剩下的 
            }

            while(tmpL<=Rend){//复制排好序的 
                data[tmpL] = tmp[tmpL];
                tmpL++;
            }

    }
    void    MSort(T *data,T *tmp,int L,int R)
    {
            int center;
            if(L < R)
            {
                center = (L+R)/2;
                MSort(data,tmp,L,center);
                MSort(data,tmp,center+1,R);//递归二分 
                Merge(data,tmp,L,center+1,R);//回来的时候排序 
            }
    }
    public:
    void    Mergesort(T *data,int size)
    {
            T   *tmp;
            tmp = (T*)malloc(size*4);//申请临时使用的空间
            if(tmp!=NULL){
                MSort(data,tmp,0,size-1);
                free(tmp);
            }

    }
};

然后我们在first.cpp里面引用Sort.h文件,使用里面的MergeSort类:

#include<stdio.h>  
#include<stdlib.h> 
#include "Sort.h" //Sort.h必须和你的cpp文件在同一个目录

using   namespace   std;
int main()  
{  

    int     d[]={4,6,1,3,9,100,-90};
    MergeSort<int>  mg;//引用Sort.h里面的模板类
    mg.Mergesort(d,7);//第一个参数为数组指针,第二个参数为数组的大小

    for(int i=0;i<7;i++) 
        printf("%d\t",d[i]);
    return 0;  
}  

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值