回 帖 发 新 帖 刷新版面

主题:递归的并归排序的问题

一下是代码,但是不知道为什么排不了序,希望高手帮忙改一下,其中可以修改的地方已经标出



// gasdfasdf.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream.h"
#include "stdlib.h"

// 使用getch()

typedef int Keytype;
const int Max=10;

struct Datatype
{
    Keytype key;

    Datatype(){}
    Datatype(Keytype item){key=item;}

    int operator <=(const Datatype &item)
    { return key<=item.key; }
    int operator <(const Datatype &item)
    { return key<item.key; }
    int operator ==(const Datatype &item)
    { return key==item.key; }
    int operator >=(const Datatype &item)
    { return key>=item.key; }
    int operator >(const Datatype &item)
    { return key>item.key; }
    int operator !=(const Datatype &item)
    { return key!=item.key; }
};

void PrintOut(Datatype a[],int n)
{
    cout<<"数组内容是:";
    for(int i=0;i<n;i++)
        cout<<a[i].key<<"  ";
    cout<<endl;
}





void myMerge(Datatype olddata[],Datatype newdata[],int p,int m,int n)
// olddata[p]..olddata[m] and olddata[m+1]..olddata[n]已排序,
//   把这两个子表合并到 newdata[p]..newdata[n]   

    int i,j,k,a;



    i=p; j=m+1; k=p;
    while ((i<=m)&&(j<=n))
        if (olddata[i]<=olddata[j])
            newdata[k++]=olddata[i++];
        else newdata[k++]=olddata[j++];
    if (i<m+1) for (a=i;a<=m;a++)  newdata[k++]=olddata[a];//可以修改
    if (j<n+1) for (a=j;a<=n;a++)  newdata[k++]=olddata[a];//可以修改


}

void myMergesort(Datatype olddata[],Datatype newdata[],int s,int t)
// 对olddata[s]..olddata[t]进行排序,结果仍存于olddata[s]..olddata[t]

    int mid=(s+t)/2;
    if (s<=t)
         if (s==t) newdata[s]=olddata[s];
    else 
    {
        myMergesort(olddata,newdata,s,mid);
        myMergesort(olddata,newdata,mid+1,t);//可以修改
        myMerge(olddata,newdata,s,mid,t);//可以修改
     }
olddata=newdata;//可以修改

}

void myMergeSortALL(Datatype a[],int n)
{
    Datatype *swap=new Datatype[n];
    myMergesort(a,swap,0,n-1);
    delete []swap;
    cout<<endl<<"完成了递归的归并排序……"<<endl;
}


void main(void)
{

    Datatype test[Max]={1,21,3,22,5,13,7,8,9,0};
    PrintOut(test,Max);
    myMergeSortALL(test,Max);
    PrintOut(test,Max);
}

回复列表 (共1个回复)

沙发

不是吧,没有人可以帮我搞好吗?
惨了

我来回复

您尚未登录,请登录后再回复。点此登录或注册