如有相关作业实验,可以拿去参考一下,欢迎指正错误
非递归算法如下:
#include <iostream>
#include<fstream>
#include<ctime>
#include<cstdlib>
using namespace std;
void Merge_Sort(int n,int r[],int r1[]);
void Merge(int r[],int r1[],int s,int m,int t);
void Init(int n,int *r,int * r1);
void Init(int n,int *r,int * r1)
{
int x;
srand((unsigned)time(NULL));
FILE *fp;
fp=fopen("hello.txt","w+");
fprintf(fp,"%d ",n);
for(int i=1;i<=n;i++)
{
x=rand() %1000;
fprintf(fp,"%d ",x);
}
rewind(fp);
fscanf(fp," %d",&n);
for(int i=0;i<n;i++)
fscanf(fp," %d",&r[i]);
}
int main()
{
int n;
srand((unsigned)time(NULL));
cout << "how many" << endl;
cin>>n;
int *r=(int *)malloc(n*sizeof(int));
int *r1=(int *)malloc(n*sizeof(int));
Init(n,r,r1);
Merge_Sort(n,r,r1);
for(int i=0;i<n;i++)
cout<<r[i]<<" ";
free(r);
free(r1);
return 0;
}
void Merge_Sort(int n,int r[],int r1[])
{
int length=1;
while(length<=n)
{
int i;
for(i=0;i+2*length<=n;i=i+2*length)
Merge(r,r1,i,i+length-1,i+2*length-1);
if((i+length)<=(n-1))
Merge(r,r1,i,i+length-1,n-1);
length*=2;
}
}
void Merge(int r[],int r1[],int s,int m,int t)
{
int i=s,j=m+1,k=s;
while(i<=m&&j<=t)
{
if(r[i]<=r[j])
r1[k++]=r[i++];
else
{
r1[k++]=r[j++];
}
}
while(i<=m)
r1[k++]=r[i++];
while(j<=t)
r1[k++]=r[j++];
for(int l=s;l<=t;l++)
r[l]=r1[l];
}
运行演示:
递归算法
#include <iostream>
#include<ctime>
#include<cstdlib>
#include<fstream>
using namespace std;
void Merge(int r[],int r1[],int s,int m,int t);
void Merge_Sort(int r[],int r1[],int s,int t);
void Init(int n,int *r,int * r1);
void Init(int n,int *r,int * r1)
{
int x;
srand((unsigned)time(NULL));
FILE *fp;
fp=fopen("hello.txt","w+");
fprintf(fp,"%d ",n);
cout<<"Êý¾Ý˳Ðò:1.Ëæ»ú 2.ÕýÐò 3ÄæÐò£º";
int l;
cin>>l;
switch(l)
{
case 1:
{
srand((unsigned)time(NULL));
for(int i=1;i<=n;i++)
{
x=rand() %1000;
fprintf(fp,"%d ",x);
}
rewind(fp);
fscanf(fp," %d",&n);
for(int i=0;i<n;i++)
fscanf(fp," %d",&r[i]);
}
case 2:
{
for(int i=1;i<=n;i++)
{
fprintf(fp,"%d ",i);
}
rewind(fp);
fscanf(fp," %d",&n);
for(int i=0;i<n;i++)
fscanf(fp," %d",&r[i]);
}
case 3:
{
for(int i=n;i>=1;i--)
{
fprintf(fp,"%d ",i);
}
rewind(fp);
fscanf(fp," %d",&n);
for(int i=0;i<n;i++)
fscanf(fp," %d",&r[i]);
}
}
}
int main()
{
int n;
srand((unsigned)time(NULL));
cout << "how many" << endl;
cin>>n;
int *r=(int *)malloc(n*sizeof(int));
int *r1=(int *)malloc(n*sizeof(int));
Init(n,r,r1);
Merge_Sort(r,r1,0,n-1);
for(int i=0;i<n;++i)
cout<<r[i]<<" ";
return 0;
}
void Merge_Sort(int r[],int r1[],int s,int t)
{
if(s==t)
return;
else{
int m=(s+t)/2;
Merge_Sort(r,r1,s,m);
Merge_Sort(r,r1,m+1,t);
Merge(r,r1,s,m,t);
}
}
void Merge(int r[],int r1[],int s,int m,int t)
{
int i=s,j=m+1,k=s;
while(i<=m&&j<=t)
{
if(r[i]>r[j])
r1[k++]=r[j++];
else
r1[k++]=r[i++];
}
while(i<=m)
r1[k++]=r[i++];
while(j<=t)
r1[k++]=r[j++];
for(int l=s;l<=t;l++)
r[l]=r1[l];
}
运行演示: