Mai intai trebuie sa te autentifici.
Cod sursa(job #2900746)
Utilizator | Data | 12 mai 2022 08:31:45 | |
---|---|---|---|
Problema | Sortare prin comparare | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.96 kb |
#include <fstream>
using namespace std;
// merge sort
ifstream fin("algsort.in");
ofstream fout("algsort.out");
const int DIM = 500010;
int n, v[DIM], w[DIM];
void sorteaza(int st, int dr), interclaseaza(int st, int mid, int dr);
int main() {
fin >> n;
for (int i = 0; i < n; i++) {
fin >> v[i];
}
sorteaza(0, n - 1);
for (int i = 0; i < n; i++)
fout << v[i] << " ";
return 0;
}
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);
}
}
void interclaseaza(int st, int mid, int dr) {
int i = st, j = mid + 1, k = st - 1;
while (i <= mid && j <= dr) {
if (v[i] < v[j])
w[++k] = v[i++];
else
w[++k] = v[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];
}