Pagini recente » Cod sursa (job #710019) | Cod sursa (job #2959523) | Cod sursa (job #2580832) | Cod sursa (job #588484) | Cod sursa (job #1144516)
/*
/// TIME = 0.412
#include<iostream>
#include<fstream>
using namespace std;
void MergeSort(long int[],int,int);
void Interchange(long int[],int,int,int);
long int B[500005];
int main(){
ifstream InFile("algsort.in");
ofstream OutFile("algsort.out");
long int A[500005]; int n;
InFile>>n;
for(int i=0;i<n;i++) InFile>>A[i];
MergeSort(A,0,n-1);
for(int i=0;i<n;i++) OutFile<<A[i]<<" ";
}
void MergeSort(long int A[],int st,int dr){
if(st<dr){
int mid=(st+dr)>>1;
MergeSort(A,st,mid);
MergeSort(A,mid+1,dr);
Interchange(A,st,mid,dr);
}
}
void Interchange(long int A[],int st,int mid,int dr){
int k=st;
int i=st,j=mid+1;
for ( ; i<=mid && j<=dr; )
if(A[i]<A[j]){
B[k++]=A[i++];
}else{
B[k++]=A[j++];
}
for ( ; i<=mid; ) B[k++]=A[i++];
for ( ; j<=dr; ) B[k++]=A[j++];
for(k=st;k<=dr;++k) A[k]=B[k];
}
*/
#include <iostream>
#include <cstdio>
using namespace std;
int N, A[500005];
void ReadData();
void Print();
void MSort(int , int );
void Interclasare(int , int , int );
int main()
{
freopen("algsort.in", "rt", stdin);
freopen("algsort.out", "wt", stdout);
ReadData();
MSort(1,N);
Print();
fclose(stdin);
fclose(stdout);
return 0;
}
void ReadData()
{
scanf("%d", &N);
int i;
for (i = 1; i <= N; ++i)
{
scanf("%d", &A[i]);
}
}
void Print()
{
int i;
for (i = 1; i <= N; ++i)
{
printf("%d ", A[i]);
}
printf("\n");
}
void MSort(int p, int q)
{
if (q > p)
{
int m = (p+q)>>1;
MSort(p,m);
MSort(m+1,q);
Interclasare(p,m,q);
}
}
void Interclasare(int p, int m, int q)
{
int i = p, j = m+1, k = i;
int B[500005];
for ( ; i <= m and j <= q; )
if (A[i] < A[j])
B[k++] = A[i++];
else
B[k++] = A[j++];
for ( ; i <= m; B[k++] = A[i++]);
for ( ; j <= q; B[k++] = A[j++]);
for (i = p; i <= q; ++i) A[i] = B[i];
}