归并排序法实现

简介: 归并排序法实现
/*
     归并排序实现
    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);
}
相关文章
|
7月前
归并排序详解
归并排序详解
71 1
|
1月前
归并排序
归并排序。
21 2
|
6月前
|
算法 搜索推荐 Java
归并排序就是这么容易
归并排序就是这么容易
45 2
|
7月前
|
存储 算法 搜索推荐
C++归并排序的实现
C++归并排序的实现
|
7月前
|
搜索推荐
归并排序是什么
归并排序是什么
20 归并排序
20 归并排序
46 0
|
存储 算法 搜索推荐
归并排序(看了就会)
归并排序(看了就会)
|
算法
归并排序及小和问题(中)
归并排序及小和问题(中)
163 1
归并排序及小和问题(中)
|
搜索推荐 算法 C#
C#——归并排序
C#——归并排序
160 0
|
算法
【2. 归并排序】
归并与快排不同: >快速排序: >- 分界点是随机数组里面的一个`数`来分,使得左边都是<= 这个数,右边 >= 这个数 (`数值`) >- 先分完,在分别递归俩边 > >归并排序: >- 先递归俩边,在进行合并操作 >- 分界点是`整个数组中间的位置`(`下标值`)
99 0
【2. 归并排序】