Pagini recente » Cod sursa (job #2420862) | Cod sursa (job #148721) | Cod sursa (job #2981962) | Cod sursa (job #2972270) | Cod sursa (job #1541819)
// merfesort(sortare prin interclasare) o(n log n) timp
// o(n) de 2 ori memorie
#include <fstream>
using namespace std;
int n, i, x;
int v[500010], w[500010];
void interclaseaza(int st, int mid, int dr) {
int i = st;
int j = mid+1;
int k = st-1;
while (i<=mid && j<=dr) {
if (v[i] < v[j]) {
k++;
w[k] = v[i];
i++;
} else {
k++;
w[k] = v[j];
j++;
}
}
for (;i<=mid;i++)
w[++k] = v[i];
for (;j<=dr;j++)
w[++k] = v[j];
for (i=st;i<=dr;i++)
v[i] = w[i];
}
void sorteaza(int st, int dr) {
if (st < dr) {
int mid = (st + dr)/2;
sorteaza(st, mid);
sorteaza(mid+1, dr);
interclaseaza(st, mid, dr);
}
}
int main () {
ifstream fin ("algsort.in");
ofstream fout("algsort.out");
fin>>n;
// numaram de cate ori apare fiecare valoare
for (i=1;i<=n;i++) {
fin>>v[i];
}
sorteaza(1, n);
for (i=1;i<=n;i++)
fout<<v[i]<<" ";
return 0;
}