Pagini recente » Cod sursa (job #1390756) | Cod sursa (job #258356) | Cod sursa (job #85277) | Cod sursa (job #1343408) | Cod sursa (job #612101)
Cod sursa(job #612101)
//mergesort
#define N 500005
#include <stdio.h>
int A[N];
int MergeAux[N];
int n;
using namespace std;
void Read() {
freopen("sortare.in","r",stdin);
freopen("sortare.out","w",stdout);
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d",&A[i]);
return;
}
void MergeArrays(int start, int middle, int end) {
int keepStart = start;
int firstEnd = middle;
int secStart = middle + 1;
int auxIndex = 1;
while((start <= firstEnd) && (secStart <= end)) {
if (A[start] < A[secStart]) {
MergeAux[auxIndex++] = A[start];
start++;
}
else {
MergeAux[auxIndex++] = A[secStart];
secStart++;
}
}
while(start <= firstEnd) {
MergeAux[auxIndex++] = A[start];
start++;
}
while(secStart <= end) {
MergeAux[auxIndex++] = A[secStart];
secStart++;
}
for(int i = 1; i < auxIndex; i++)
A[keepStart + i - 1] = MergeAux[i];
}
void Mergesort(int st, int dr) {
if (st != dr) {
int mij = (st + dr) / 2;
Mergesort(st, mij);
Mergesort(mij + 1, dr);
MergeArrays(st, mij, dr);
}
}
void Write() {
for(int i = 1; i <= n; i++)
printf("%d ", A[i]);
}
int main()
{
Read();
Mergesort(1, n);
Write();
return 0;
}