Pagini recente » Cod sursa (job #781901) | Cod sursa (job #1490360) | Borderou de evaluare (job #2073158) | Cod sursa (job #2542626) | Cod sursa (job #796116)
Cod sursa(job #796116)
#include<stdio.h>
#define Nmax 500001
int N, A[Nmax];
void merge(int A[], int left, int mid, int right) {
int k, i, j, t, l, B[Nmax];
i = left;
j = mid+1;
k = 0;
while(i<=mid && j<=right)
if(A[i] < A[j]) {
B[++k] = A[i];
i++;
}
else {
B[++k] = A[j];
j++;
}
while(i<=mid) {
B[++k] = A[i];
i++;
}
while(j<=right) {
B[++k] = A[j];
j++;
}
t = left;
for(l=1; l<=k; l++)
A[t++] = B[l];
}
void mergesort(int A[], int left, int right) {
if(left == right)
return;
int mid = (left+right)/2;
mergesort(A,left,mid);
mergesort(A,mid+1,right);
merge(A,left,mid,right);
}
int main() {
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int i;
scanf("%d",&N);
for(i=1; i<=N; i++)
scanf("%d",&A[i]);
mergesort(A,1,N);
for(i=1; i<=N; i++)
printf("%d ",A[i]);
return 0;
}