Pagini recente » Istoria paginii utilizator/iulia_marina | Monitorul de evaluare | Statistici Mendoiu Cosmina (jasmina) | Istoria paginii runda/simulare_oni_9_z2_2k15 | Cod sursa (job #2685763)
#include <stdio.h>
#include <string.h>
using namespace std;
int v[500001];
int t[500001];
void merge(int l, int mid, int r){
int ll = l, rr = mid + 1, tt = 0;
while (ll <= mid && rr <= r){
if (v[ll] < v[rr]){
t[tt] = v[ll];
ll++;
}
else {
t[tt] = v[rr];
rr++;
}
tt++;
}
while (ll <= mid){
t[tt] = v[ll];
ll++;
tt++;
}
while (rr <= r){
t[tt] = v[rr];
rr++;
tt++;
}
for (int i=l; i<=r; i++)
v[i] = t[i-l];
}
void mergesort(int l, int r){
if (l == r)
return;
int mid = (l + r) / 2;
mergesort(l, mid);
mergesort(mid+1, r);
merge(l, mid, r);
}
int main()
{
int n;
FILE * fin = fopen("algsort.in", "r");
FILE * fout = fopen("algsort.out", "w");
fscanf(fin, "%d", &n);
for (int i=0; i<n; i++)
fscanf(fin, "%d", &v[i]);
mergesort(0, n-1);
//merge(0, 10, 19);
for (int i=0; i<n; i++)
fprintf (fout, "%d ", v[i]);
fclose(fout);
}
// 1 1 1 2 2 3 5 7 8 8 8 1 1 4 4 4 4 7 9 9