Pagini recente » Monitorul de evaluare | Istoria paginii utilizator/deliabaltatescu | Cod sursa (job #2204554) | Cod sursa (job #1208589) | Cod sursa (job #2077502)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
FILE *fi, *fo;
int n, i, j;
void swap(int *a, int *b){
int tmp = *a;
*a = *b;
*b = tmp;
}
int part(int a[], int st, int dr){
srand(time(NULL));
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]);
}
return idx_max;
}
void quickSort(int a[], int st, int dr){
if (st >= dr) return ;
int mid = part(a, st, dr);
quickSort(a, st, mid - 1);
quickSort(a, mid + 1, dr);
}
int main(){
fi = fopen("algsort.in", "r");
fo = fopen("algsort.out", "w");
fscanf(fi, "%d", &n);
int *a;
a = (int *)malloc((n + 1) * sizeof(int));
for (i = 0; i < n; i++) fscanf(fi, "%d", a + i);
quickSort(a, 0, n - 1);
for (i = 0; i < n; i++) fprintf(fo, "%d ", a[i]);
return 0;
}