Pagini recente » Profil diaconuvasi | Istoria paginii utilizator/afloarei | Cod sursa (job #705840) | Monitorul de evaluare | Cod sursa (job #2077524)
#include <cstdio>
#include <cstdlib>
int n, A[500100];
void swap(int &a, int &b){
int tmp = a;
a = b;
b = tmp;
}
int part(int st, int dr){
int pivot = st + (rand() % (dr - st + 1));
int idx_min = st - 1, idx_max = dr + 1;
while (1){
do{ idx_min++; }while(A[idx_min] < A[pivot]);
do{ idx_max--; }while(A[idx_max] > A[pivot]);
if (idx_min >= idx_max) return idx_max;
swap(A[idx_min], A[idx_max]);
}
}
void quickSort(int st, int dr){
if (st < dr){
int mid = part(st, dr);
quickSort(st, mid);
quickSort(mid + 1, dr);
}
}
int main(){
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &A[i]);
quickSort(1, n);
for (int i = 1; i <= n; i++) printf("%d ", A[i]);
return 0;
}