Pagini recente » Cod sursa (job #1013128) | Cod sursa (job #1941623) | Cod sursa (job #816137) | Cod sursa (job #2300031) | Cod sursa (job #1239362)
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define Nmax 500005
int v[Nmax];
int n;
int get_pivot(int inf, int sup){
if (sup - inf <= 2)
return (inf + sup) / 2;
int a = rand() % (sup - inf + 1) + inf;
int b = rand() % (sup - inf + 1) + inf;
int c = rand() % (sup - inf + 1) + inf;
if (v[a] >= v[b] && v[b] >= v[c])
return b;
else if (v[b] >= v[a] && v[a] >= v[c])
return a;
return c;
}
void swap(int *a, int *b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void print(){
int i;
for (i = 1; i <= n; ++i)
printf("%d ", v[i]);
printf("\n");
}
void quick_sort(int inf, int sup){
if (sup - inf < 2){
if (v[sup] < v[inf])
swap(&v[sup], &v[inf]);
return;
}
int at = (inf + sup) / 2;
int p = v[at];
int i = inf;
int j = sup;
while (i <= j){
while (v[i] < p) ++i;
while (v[j] > p) --j;
if (i <= j){
swap(&v[i], &v[j]);
++i;
--j;
}
}
quick_sort(inf, i - 1);
quick_sort(i, sup);
}
int main(){
int i;
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
srand( time(NULL) );
scanf("%d", &n);
for (i = 1; i <= n; ++i)
scanf("%d", &v[i]);
quick_sort(1, n);
print();
fclose(stdin);
return 0;
}