Pagini recente » Cod sursa (job #864719) | Borderou de evaluare (job #366974) | Cod sursa (job #364172) | Cod sursa (job #626485) | Cod sursa (job #2067275)
#include <stdio.h>
void mergeSort(int x, int y, int v[]){
if(x == y) return;
int mij = (x + y) / 2;
mergeSort(x, mij, v);
mergeSort(mij + 1, y, v);
int pos1 = x;
int pos2 = mij + 1;
int pos = 0;
int w[y - x + 1];
while(pos1 <= mij && pos2 <= y)
if(v[pos1] < v[pos2])
w[pos++] = v[pos1++];
else
w[pos++] = v[pos2++];
while(pos1 <= mij)
w[pos++] = v[pos1++];
while(pos2 <= y)
w[pos++] = v[pos2++];
int i;
for(i = 0; i < pos; i++)
v[x + i] = w[i];
}
int main()
{
FILE *fin=fopen("algsort.in","r");
FILE *fout=fopen("algsort.out","w");
int n, v[500010], i;
fscanf(fin, "%d", &n);
for(i = 1; i <= n; i++)
fscanf(fin, "%d", &v[i]);
mergeSort(1, n, v);
for(i = 1; i <= n; i++)
fprintf(fout, "%d ", v[i]);
return 0;
}