Pagini recente » Cod sursa (job #551969) | Cod sursa (job #868243) | Cod sursa (job #2903999) | Cod sursa (job #2530886) | Cod sursa (job #606458)
Cod sursa(job #606458)
//merge sort
#define N 500005
#include<stdio.h>
using namespace std;
int a[N];
int sirAux[N];
int n;
void merges(int st, int dr) {
if (st == dr) return;
int mij = (st + dr) / 2;
merges(st, mij);
merges(mij + 1, dr);
int curr1 = st, curr2 = mij + 1;
int contor = 1;
while ((curr1 <= mij) && (curr2 <= dr)) {
if (a[curr1] < a[curr2]) {
sirAux[contor++] = a[curr1];
curr1++;
}
else {
sirAux[contor++] = a[curr2];
curr2++;
}
}
while(curr1 <= mij) {
sirAux[contor++] = a[curr1];
curr1++;
}
while(curr2 <= dr) {
sirAux[contor++] = a[curr2];
curr2++;
}
for(int i = st; i <= dr; i++)
a[i] = sirAux[i - st + 1];
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
for(int i = 1; i <= n; i++) {
scanf("%d",&a[i]);
}
merges(1,n);
for(int i = 1; i <= n; i++)
printf("%d ",a[i]);
return 0;
}