归并排序法实现

来源:互联网 发布:魔兽世界战斗数据插件 编辑:程序博客网 时间:2024/05/23 22:27

/*     归并排序实现    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);} 


0 0
原创粉丝点击