Pagini recente » Cod sursa (job #2260485) | Cod sursa (job #3191524) | Cod sursa (job #1031807) | Cod sursa (job #620469) | Cod sursa (job #2542129)
using namespace std;
#define fisier "algsort"
#ifdef fisier
#include <fstream>
ifstream in(fisier ".in");
ofstream out(fisier ".out");
#else
#include <iostream>
#define in cin
#define out cout
#endif
const int MAX_N = 500000;
int v[MAX_N], n;
void v_copy(int *a, int *b, int n) {
while (n--) {
a[n] = b[n];
}
}
void v_read(int* v, int& n) {
in >> n;
for (int i = 0; i < n; i++) {
in >> v[i];
}
}
void v_print(int* v, int n) {
for (int i = 0; i < n; i++) {
out << v[i] << ' ';
}
out << '\n';
}
inline void podea(int& s, int val) {if (val < s) s = val;}
inline void tavan(int& s, int val) {if (val > s) s = val;}
int* interclaseaza(int *a, int n, int *b, int m) {
static int t[MAX_N];
int i = 0, j = 0, k = 0;
while (i < n && j < m) {
if (a[i] < b[j]) {
t[k++] = a[i++];
} else {
t[k++] = b[j++];
}
}
while (i < n) {
t[k++] = a[i++];
}
while (j < m) {
t[k++] = b[j++];
}
return t;
}
void mergesort(int* st, int* dr) {
if (st < dr) {
int* m = st + (dr - st) / 2;
mergesort(st, m);
mergesort(m + 1, dr);
v_copy(st, interclaseaza(st, m - st + 1, m + 1, dr - m), dr - st + 1);
}
}
int* v_min(int* st, int* dr) {
int* rt = st;
while (++st <= dr) {
if (*st < *rt)
rt = st;
}
return rt;
}
int* v_max(int* st, int* dr) {
int* rt = st;
while (++st <= dr) {
if (*st > *rt)
rt = st;
}
return rt;
}
void frecvsort(int* st, int* dr, int _min, int _max) {
static int frecv[MAX_N];
int dif = _max - _min;
for (int i = 0; i <= dif; i++) {
frecv[i] = 0;
}
for (int* i = st; i <= dr; i++) {
frecv[*i - _min]++;
}
for (int i = 0; i <= dif; i++) {
while (frecv[i]--) {
*(st++) = i + _min;
}
}
}
/*
void sortare_partitionata(int* st, int* dr) {
for (int* part = MAX_N; part <= n; i += MAX_N) {
}
}
*/
int main() {
v_read(v, n);
mergesort(v, v + n - 1);
v_print(v, n);
}
//