Pagini recente » Cod sursa (job #338619) | Cod sursa (job #132147) | Cod sursa (job #1172948) | Cod sursa (job #1428816) | Cod sursa (job #2291469)
#include <fstream>
#include <cstdlib>
#include <time.h>
using namespace std;
int v[500005], n;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int alegere_pivot(int st, int dr) {
srand(time(NULL));
rand();
int random = st + rand() % (dr - st);
//cout << random << " ";
return random;
}
int partitie (int st, int dr) {
//cout << v[dr] << ": ";
int pivot = v[dr];
int i = st, j = dr - 1;
while (i <= j) {
if (v[i] >= pivot && v[j] < pivot) swap(v[i], v[j]);
if (v[i] < pivot) i++;
if (v[j] >= pivot) j--;
}
swap(v[i], v[dr]);
//for (int i = 0; i < n; ++i) cout << v[i] << " ";
//cout << "\n";
return i;
}
void qsort(int st, int dr) {
if (st >= dr) return;
int pivot = alegere_pivot(st, dr);
swap(v[pivot], v[dr]);
int poz = partitie(st, dr);
qsort(st, poz - 1);
qsort(poz + 1, dr);
}
int main()
{
int i;
fin >> n;
for (i = 0; i < n; ++i) fin >> v[i];
qsort(0, n - 1);
for (i = 0; i < n; ++i) fout << v[i] << " ";
return 0;
}