Pagini recente » Cod sursa (job #1076690) | Cod sursa (job #2873513) | Cod sursa (job #2902269) | Cod sursa (job #1873052) | Cod sursa (job #1480050)
#include <stdio.h>
const int MAXN = 500004;
int n, a[MAXN], b[MAXN>>1];
void inter_clasare(int left, int right)
{
// printf("%d %d\n", left, right);
int i, j, k=0, m=(left+right)>>1;
for(i = left;i <= m; ++i)
b[ k++ ] = a[ i ];
i = 0;
k = left;
j = m+1;
while((i <= m-left)&&(j <= right))
a[ k++ ]=(b[i] < a[j]) ? b[i++] : a[j++];
while(i<=m-left)
a[k++]=b[i++];
}
void merge_sort(int left,int right)
{
int m = (left+right)>>1;
if(right != left)
{
merge_sort(left,m);
merge_sort(m+1,right);
inter_clasare(left,right);
}
}
int main()
{
FILE *in = fopen("algsort.in", "r");
FILE *out = fopen("algsort.out", "w");
int n,i;
fscanf(in,"%d",&n);
for(i = 0;i < n; ++i)
fscanf(in,"%d",a+i);
merge_sort(0,n-1);
for(i = 0;i < n;++i)
fprintf(out,"%d ",a[i]);
return 0;
}