zoukankan      html  css  js  c++  java
  • 归并排序法实现

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


  • 相关阅读:
    java入门最好的一套书
    【转载】vim的E492错误
    SESSION保存到数据库中,然后从数据库中读取
    django教程
    用vim写python代码的两个关键设置
    HTTP/1.1中文版
    SQL基础教程
    简单清晰的HTML教程
    vim中如何按一个键就保存文件
    【转载】Vim操作
  • 原文地址:https://www.cnblogs.com/pzqu/p/9457667.html
Copyright © 2011-2022 走看看