归并排序法实现

/*
     归并排序实现
    coder:QPZ
        time:2014-12-03
*/
#include <time.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
class Mergesort{
       private:
              int *Arr;
              int n;
   public:
           Mergesort(int n){
                  this->n=n;
                  srand((unsigned)time(NULL));
                  Arr=(int*)malloc(n*sizeof(int));
                  for(inti=0;i < n;i++){
                         Arr[i]=rand()%100;
                  }/*endfor*/
           }
     void    Msort(int left,int right);
     void Merge(int left,int right,int rigntEnd);
           void PrinArr();
           ~Mergesort(){
                  free(Arr);
                     }
};
int main(void)
{
       intn;
       cin>>n;
       classMergesort *p=new Mergesort(n);
       p->PrinArr();
       p->Msort(0,n-1);
       p->PrinArr();
       return0;
}
void Mergesort::PrinArr()
{
       for(inti=0;i<n;i++){
              cout<<Arr[i]<<" ";
       }/*endfor*/
       cout<<endl;
}
void Mergesort::Msort(int left,int right){
       intmiddle;
       if(left<right){
              middle=(left+right)/2;
              //分割数集
              Msort(left,middle);
              Msort(middle+1,right);
              //归并操作
              Merge(left,middle+1,right);
       }
}
void Mergesort::Merge(int left,int right,intrightEnd)
{    
       int*TmpArry=(int *)malloc((rightEnd-left+1)*sizeof(int));
       inttmp;
       inti;
       intLeft=left;
       intRight=right;
       /*比大小赋值,结束后接*/
       for(tmp=0;Left<right&& Right<=rightEnd;) {
              if(Arr[Left]<=Arr[Right]){
                     TmpArry[tmp++]=Arr[Left++];
              } else{
                     TmpArry[tmp++]=Arr[Right++];
              }/*end if else*/
       }/*endfor*/
       while(Left<right){
       TmpArry[tmp++]=Arr[Left++];          
       }
       while(Right<rightEnd){
              TmpArry[tmp++]=Arr[Right++];
       }
       /*Tmp赋值返回*/
       for(i=0,Left=left;i< tmp;i++){
              Arr[Left++]=TmpArry[i];
       }/*end for*/
       free(TmpArry);
}
 


原文地址:https://www.cnblogs.com/pzqu/p/9457667.html