Pagini recente » Cod sursa (job #1366716) | Cod sursa (job #377689) | Cod sursa (job #603411) | Cod sursa (job #674742) | Cod sursa (job #1738539)
#include <cstdio>
#include <cstdlib>
using namespace std;
void swap(int &a, int &b) {
int aux = a;
a = b;
b = aux;
}
void printArray(int* arr, int n) {
for (int i = 0; i < n; ++ i) {
printf("%d ", arr[i]);
}
printf("\n");
}
int partition(int* arr, int left, int right) {
int pivotVal = arr[left + rand() % (right - left + 1)];
int i = left, j = right;
while(i < j) {
if (i < right && arr[i] < pivotVal) {
++ i;
}
if (j > left && arr[j] > pivotVal) {
-- j;
}
if (i < j && arr[i] >= pivotVal && arr[j] <= pivotVal) {
swap(arr[i], arr[j]);
++ i;
-- j;
}
}
// return pivot position
return i;
}
void qsort(int* arr, int left, int right) {
if (right <= left) {
return;
}
int i = partition(arr, left, right);
qsort(arr, left, i - 1);
qsort(arr, i + 1, right);
}
int main() {
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
int n;
scanf("%d", &n);
int *arr = new int[n];
for (int i = 0; i < n; ++ i) {
scanf("%d", &arr[i]);
}
qsort(arr, 0, n - 1);
printArray(arr, n);
delete[] arr;
return 0;
}