1.代码:
#include <iostream>
#include <malloc.h>using namespace std;
void merge(int *A,int p,int q,int r)
{
int n1,n2,i,j,k;
int *left=NULL,*right=NULL;
n1=q-p+1;
n2=r-q;
left=(int*)malloc(sizeof(int)*(n1));
right=(int*)malloc(sizeof(int)*(n2));
for(i=0;i<n1;i++)
{
left[i]=A[p+i];
}
for(j=0;j<n2;j++)
{
right[j]=A[q+j+1];
}
i=j=0;
k=p;
while(i<n1&&j<n2)
{
if(left[i]<=right[j])
{
A[k]=left[i];
k++;
i++;
}
else
{
A[k]=right[j];
j++;
k++;
}
}
for(;i<n1;i++)
A[k++]=left[i];
for(;j<n2;j++)
A[k++]=right[j];
}
void mergesort(int *A,int p,int r)
{
int q;
if(p<r)
{
q=(int)((p+r)/2);
mergesort(A,p,q);
mergesort(A,q+1,r);
merge(A,p,q,r);
}
}
int main()
{
int n;
int* input=NULL;
cout<<"请输入数组的长度:";
cin>>n;
input=(int*)malloc(sizeof(int)*(n));
cout<<"请对数组赋值:";
for(int i=0;i<n;i++)
{
cin>>input[i];
}
mergesort(input,0,n-1);
for(int i=0;i<n;i++)
{
cout<<input[i]<<" ";
}
cout<<endl;
system("pause");
return 0;
}
2.时间复杂度:O(nlgn)