Pagini recente » Cod sursa (job #111258) | Cod sursa (job #331869) | Cod sursa (job #339344) | Cod sursa (job #348034) | Cod sursa (job #2280588)
#include <vector>
#include <cstdio>
#include <ctime>
#include <cstdlib>
const int MAX_N = 5 * 1e5;
int v[MAX_N];
void swap(int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
}
int partition(int left, int right) {
int pivotPos = left + rand() % (right - left + 1);
swap(&v[pivotPos], v[right]);
int pivot = v[right];
int i = (left - 1);
for (int j = left; j <= right - 1; j++) {
if (v[j] <= pivot) {
i++;
swap(&v[i], &v[j]);
}
}
swap(&v[i + 1], &v[right]);
return (i + 1);
}
void quickSort(int left, int right) {
if (left >= right) {
return;
}
int pivotPos = partition(left, right);
quickSort(left, pivotPos - 1);
quickSort(pivotPos + 1, right);
}
int main() {
freopen("algsort.in", "r", stdin);
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &v[i]);
}
fclose(stdin);
srand(time(NULL));
quickSort(0, n - 1);
freopen("algsort.out", "w", stdout);
for (int i = 0; i < n; i++) {
printf("%d", v[i]);
}
printf("\n");
fclose(stdout);
return 0;
}