Pagini recente » Cod sursa (job #2702356) | Rezultatele filtrării | Cod sursa (job #1567481) | Cod sursa (job #1115064) | Cod sursa (job #2693640)
#include <iostream>
#include <fstream>
#define dim 1001
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int v[dim];
int c[dim];
void inter(int st, int dr) {
// a: 0 ... n-1
// b: 0 ... m-1
// st ... m ... dr
// a: st .. m
// b: m+1 ... dr
int m = (st + dr)/2;
int i = st; // pozitia de start pentru subvectorul a
int j = m + 1; // pozitia de start pentru subvectorul b
int k = st;
while (i <= m && j <= dr){
if(v[i] < v[j]) {
c[k++] = v[i++];
} else {
c[k++] = v[j++];
}
}
while (i <= m){
c[k++] = v[i++];
}
while (j <= dr){
c[k++] = v[j++];
}
// copiez c in v
for (i = st; i <= dr; i++) {
v[i] = c[i];
}
}
void divide(int st, int dr) {
int m;
if (st == dr) {
return;
}
m = (st + dr) / 2;
divide(st, m);
divide(m + 1, dr);
inter(st, dr);
}
int main()
{
int n;
in >> n;
for(int i = 0; i < n; i++) {
in >> v[i];
}
divide(0, n-1);
for (int i = 0; i < n; i++) {
out << v[i] << " ";
}
out << '\n';
return 0;
}