Pagini recente » Cod sursa (job #1981772) | Cod sursa (job #2110326) | Cod sursa (job #1336296) | Cod sursa (job #235538) | Cod sursa (job #2900749)
#include <fstream>
#include <random>
#include <time.h>
using namespace std;
// quick sort cu randomizarea pivotului
ifstream fin("algsort.in");
ofstream fout("algsort.out");
const int DIM = 500010;
int n, v[DIM];
void sorteaza(int st, int dr);
int poz(int st, int dr);
int main() {
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> v[i];
}
srand(time(0));
for (int i = n; i; i--) {
swap(v[1LL * rand() % i + 1], v[i]);
}
sorteaza(1, n);
for (int i = 1; i <= n; i++)
fout << v[i] << " ";
return 0;
}
void sorteaza(int st, int dr) {
if (st < dr) {
int p = poz(st, dr);
sorteaza(st, p - 1);
sorteaza(p + 1, dr);
}
}
int poz(int st, int dr) {
int dst = 0, ddr = -1;
int x = st + rand()%(dr - st + 1);
swap(v[x], v[st]);
while (st < dr) {
if (v[st] > v[dr]) {
swap(v[st], v[dr]);
swap(dst, ddr);
dst = -dst;
ddr = -ddr;
}
st += dst;
dr += ddr;
}
return st;
}