Pagini recente » Cod sursa (job #2851900) | Cod sursa (job #3328385) | Cod sursa (job #47448) | Cod sursa (job #958087) | Cod sursa (job #3339042)
#include<bits/stdc++.h>
#pragma GCC optimise("Ofast, O3, unroll-loops")
using namespace std;
void QuickSort(vector<int> &v, int left, int right){
if (left >= right) return;
int pivot = v[left];
int valori_mai_mici = 0;
for(int i = left; i <= right; i++){
valori_mai_mici += (v[i] < pivot);
}
int pivot_position = left + valori_mai_mici;
swap(v[left], v[pivot_position]);
int left_position = left, right_position = right;
while (left_position < pivot_position && right_position > pivot_position) {
while (v[left_position] < pivot)
left_position++;
while (v[right_position] >= pivot)
right_position--;
if (left_position < pivot_position && right_position > pivot_position) {
swap(v[left_position], v[right_position]);
}
}
QuickSort(v, left, left + valori_mai_mici - 1);
QuickSort(v, left + valori_mai_mici + 1, right);
}
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]);
}
random_shuffle(v.begin() + 1, v.end());
random_shuffle(v.begin() + 1, v.end());
QuickSort(v, 1, n);
for(int i = 1; i <= n; i++){
printf("%d ", v[i]);
}
return 0;
}