Pagini recente » Cod sursa (job #1003088) | Cod sursa (job #12984) | Cod sursa (job #1292297) | Cod sursa (job #2122964) | Cod sursa (job #384763)
Cod sursa(job #384763)
#include <cstdio>
#include <algorithm>
#define NMAX 500010
using namespace std;
int N, v[NMAX], i;
void read(void)
{
freopen("algsort.in", "r", stdin);
scanf("%d", &N);
for(i = 1; i <= N; ++i)
scanf("%d", &v[i]);
fclose(stdin);
}
void interclas(int ls, int mij, int ld)
{
int i, j, k;
int c[NMAX];
i = ls;
j = mij + 1;
k = 0;
while(i <= mij && j <= ld)
if(v[i] <= v[j])
c[++k] = v[i++];
else
c[++k] = v[j++];
++k;
if(i <= mij)
for( ;i <= mij; ++i, ++k)
c[k] = v[i];
if(j <= ld)
for( ; j <= ld; ++j, ++k)
c[k] = v[j];
for(i = ls, j = 1; i <= ld; ++i, ++j)
v[i] = c[j];
}
void mergeSort(int ls, int ld)
{
int mij;
if(ld - ls <= 1)
{
if(v[ls] > v[ld])
swap(v[ls], v[ld]);
}
else
{
mij = (ls + ld) / 2;
mergeSort(ls, mij);
mergeSort(mij + 1, ld);
interclas(ls, mij, ld);
}
}
void print(void)
{
freopen("algsort.out", "w", stdout);
for(i = 1; i <= N; ++i)
printf("%d ", v[i]);
fclose(stdout);
}
int main(void)
{
read();
mergeSort(1, N);
print();
return 0;
}