Pagini recente » Cod sursa (job #1708444) | Cod sursa (job #1529856) | Cod sursa (job #1147054) | Cod sursa (job #1693397) | Cod sursa (job #312438)
Cod sursa(job #312438)
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
int v[500100];
int partitie(int a, int b) {
int rad = rand() % (b - a + 1);
swap(v[a], v[a+rad]);
int pivot = v[a];
int left = a + 1, right = b;
while (1) {
while (left < b && v[left] <= pivot) ++left;
while (right > a && v[right] >= pivot) --right;
if (left < right) swap(v[left], v[right]);
else break;
}
swap(v[a], v[right]);
return right;
}
void qsort(int a, int b) {
if (a >= b) return; //done
int pivot = partitie(a, b);
qsort(a, pivot - 1);
qsort(pivot + 1, b);
}
int main() {
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n;
fin >> n;
for (int i = 0; i < n; ++i) fin >> v[i];
qsort(0, n-1);
for (int i = 0; i < n; ++i) fout << v[i] << ' ';
fout << '\n';
return 0;
};