Pagini recente » Cod sursa (job #270609) | Cod sursa (job #1283572) | Cod sursa (job #2369880) | Cod sursa (job #2373459) | Cod sursa (job #2274059)
/**
* Worg
*/
#include <ctime>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
FILE *fin = freopen("algsort.in", "r", stdin); FILE *fout = freopen("algsort.out", "w", stdout);
const int MAX_N = 5e5 + 5;
//-------- Data --------
int n;
int arr[MAX_N];
//-------- --------
void ReadInput() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
}
int PartitionArray(int begin, int end) {
int left = begin, right = end - 1, pivot = arr[begin + rand() % (end - begin)];
while (left < right) {
while (left < right && arr[left] < pivot) {
left++;
}
while (left < right && arr[right] > pivot) {
right--;
}
if (left < right) {
std::swap(arr[left], arr[right]);
left++; right--;
}
}
int mid;
if (left == right) {
if (arr[left] < pivot) {
mid = left + 1;
} else {
mid = left;
}
} else {
mid = right + 1;
}
return mid;
}
void QuickSort(int begin, int end) {
if (end - begin <= 1) return;
int mid = PartitionArray(begin, end);
/// Facem call la [begin, mid) si [mid, end)
if (mid != begin && mid != end) {
QuickSort(begin, mid);
QuickSort(mid, end);
}
}
void PrintOutput() {
for(int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
}
int main() {
ReadInput();
srand(time(NULL));
QuickSort(0, n);
PrintOutput();
return 0;
}