Pagini recente » Cod sursa (job #2563827) | Cod sursa (job #2116630) | Cod sursa (job #994478) | Cod sursa (job #1587570) | Cod sursa (job #2058221)
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;
ifstream cin ("algsort.in");
ofstream cout ("algsort.out");
const int MaxN = 500005;
int Partition(int currV[], int pivVal, int lf, int rg) {
int loPos = lf - 1;
for (int i = lf; i <= rg - 1; ++i) {
if (currV[i] <= pivVal) {
++loPos;
swap(currV[i], currV[loPos]);
}
}
//all elements <= pivVal are between 1 and loPos, so the rightful position of pivVal is loPos;
++loPos;
swap(currV[rg], currV[loPos]);
return loPos;
}
void QSort(int currV[], int lf, int rg) {
if (lf >= rg) {
return;
}
int pivPos = lf + rand() % (rg - lf + 1);
int pivVal = currV[pivPos];
swap(currV[pivPos], currV[rg]); //pivot becomes last element
int partPos = Partition(currV, pivVal, lf, rg);
QSort(currV, lf, partPos - 1);
QSort(currV, partPos + 1, rg);
}
int v[MaxN];
int main() {
srand(time(0));
int n;
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> v[i];
}
QSort(v, 1, n);
for (int i = 1; i <= n; ++i) {
cout << v[i] << ' ';
}
return 0;
}