#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
void Merge(int A[],int p,int q,int r)
{
int n1=q-p+1;
int n2=r-q;
int L[50],R[50];//n1+1,n2+1
int i,j,k;
for(i=1;i<=n1;i++)
L[i]=A[p+i-1];
for(j=1;j<=n2;j++)
R[j]=A[q+j];
L[n1+1]=0x3f3f3f3f;
R[n2+1]=0x3f3f3f3f;
i=1;
j=1;
for(k=p;k<=r;k++)
if(L[i]<=R[j])
{
A[k]=L[i];
i++;
}
else
{
A[k]=R[j];
j++;
}
}
/*
T(n)=aT(n/b)+D(n)+C(n)
=nlg(n)
*/
void Merge_sort(int A[],int p,int r)
{
int q;
if(p<r)
{
q=floor((p+r)/2.0);//D(n)=O(1)
Merge_sort(A,p,q);//C(n)=O(n)
Merge_sort(A,q+1,r);
Merge(A,p,q,r);//2T(n/2)
}
}
int main()
{
int T, i = 1, n, a[100];
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
cin >> T;
n = T;
while(T--)
{
cin>>a[i];
i++;
}
Merge_sort(a,1,n);
for(i = 1; i <= n; i++)
cout<< a[i]<<" ";
cout<<endl;
fclose(stdin);
fclose(stdout);
return 0;
}
合并排序
最新推荐文章于 2022-06-14 11:01:45 发布