主题:递归的并归排序的问题
一下是代码,但是不知道为什么排不了序,希望高手帮忙改一下,其中可以修改的地方已经标出
// 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);
}
// 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);
}