Pagini recente » Cod sursa (job #194950) | Cod sursa (job #492018) | Cod sursa (job #2753825) | Monitorul de evaluare | Cod sursa (job #2077511)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
int n, i, j, 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) return ;
int mid = part(st, dr);
quickSort(st, mid - 1);
quickSort(mid + 1, dr);
}
int main(){
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);
for (i = 1; i <= n; i++) scanf("%d", a + i);
quickSort(1, n);
for (i = 1; i <= n; i++) printf("%d ", a[i]);
return 0;
}