Pagini recente » Cod sursa (job #3307129) | Cod sursa (job #1920109) | Cod sursa (job #201344) | Cod sursa (job #72223) | Cod sursa (job #3341850)
#include<bits/stdc++.h>
#include<random>
using namespace std;
int partition(vector<int> &v, int left, int right) {
int pivot_pos = left + rand() % (right - left + 1);
swap(v[pivot_pos], v[right]);
int pivot = v[right];
int i = left - 1;
for (int j = left; j < right; j++) {
if (v[j] < pivot) {
i++;
swap(v[i], v[j]);
}
}
swap(v[i + 1], v[right]);
return i + 1;
}
void QuickSort(vector<int> &v, int left, int right) {
while (left < right) {
int p = partition(v, left, right);
if (p - left < right - p) {
QuickSort(v, left, p - 1);
left = p + 1;
} else {
QuickSort(v, p + 1, right);
right = p - 1;
}
}
}
int main(){
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
int n;
scanf("%d", &n);
vector<int> v(n + 1, 0);
for(int i = 1; i <= n; i++){
scanf("%d", &v[i]);
}
srand(2027);
QuickSort(v, 1, n);
for(int i = 1; i <= n; i++){
printf("%d ", v[i]);
}
return 0;
}