Pagini recente » Cod sursa (job #1757790) | Cod sursa (job #1073153) | infoarena - comunitate informatica, concursuri de programare | infoarena - comunitate informatica, concursuri de programare | Cod sursa (job #1710932)
#include<fstream>
#define MAXN 500005
using namespace std;
inline void swap(int* A, int i, int j) {
int aux = A[i];
A[i] = A[j];
A[j] = aux;
}
int partition(int* A, int left, int right) {
int pivotPos = rand() % (right - left + 1);
swap(A, left, left + pivotPos);
int pos = left;
for (int i = left + 1; i <= right; i++) {
if (A[i] <= A[left]) {
pos++;
swap(A, i, pos);
}
}
swap(A, left, pos);
return pos;
}
void qsort(int* A, int size, int left, int right) {
if (left < right) {
int pos = partition(A, left, right);
qsort(A, size, left, pos - 1);
qsort(A, size, pos + 1, right);
}
}
int main() {
int n;
int A[MAXN];
ifstream f("algsort.in");
ofstream g("algsort.out");
f >> n;
for (int i = 1; i <= n; i++) {
f >> A[i];
}
qsort(A, n, 1, n);
for (int i = 1; i <= n; i++) {
g << A[i] << " ";
}
g << endl;
return 0;
}