Pagini recente » Profil Banana | Monitorul de evaluare | Profil JusticeLeague | Istoria paginii utilizator/anastasei_tudor | Cod sursa (job #1260239)
#include <stdio.h>
#include <stdlib.h>
void swap(int *a, int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
int partition(int v[], int left, int right)
{
int i = left - 1, j;
int pivot = right;
for (j = left; j < right; j++) {
if (v[j] <= v[pivot]) {
i = i + 1;
swap(&v[j], &v[i]);
}
}
swap(&v[i + 1], &v[pivot]);
return (i + 1);
}
void quicksort(int v[], int left, int right)
{
if (left < right) {
int no = left + rand() % (right - left);
swap(&v[no], &v[right]);
int q = partition(v, left, right);
quicksort(v, left, q - 1);
quicksort(v, q + 1, right);
}
}
int main()
{
int n, v[500001], i;
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);
for (i = 0; i < n; i++) scanf("%d", &v[i]);
srand(time(NULL));
quicksort(v, 0, n - 1);
for (i = 0; i < n; i++) printf("%d ", v[i]);
printf("\n");
return 0;
}