Pagini recente » Cod sursa (job #1789632) | Cod sursa (job #2868206) | Cod sursa (job #2863816) | Cod sursa (job #2337235) | Cod sursa (job #767226)
Cod sursa(job #767226)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef unsigned int uint;
FILE *in, *out;
uint v[500000], N;
void quicksort(int l, int r)
{
int aux, ll, rr, pivot;
/*if(r - l < 10)
{
for(ll = l; ll < r; ++ll)
for(rr = ll + 1; rr <= r; ++rr)
if(v[ll] > v[rr])
{ aux = v[ll]; v[ll] = v[rr]; v[rr] = aux; }
}
else */if(l < r)
{
pivot = l + rand() % (r - l + 1);
aux = v[r]; v[r] = v[pivot]; v[pivot] = aux;
pivot = r;
for(ll = l - 1, rr = r; ll < rr;)
{
while(ll < rr && v[++ll] < v[pivot]);
while(ll < rr && v[pivot] < v[--rr]);
aux = v[ll]; v[ll] = v[rr]; v[rr] = aux;
}
aux = v[pivot]; v[pivot] = v[ll]; v[ll] = aux;
pivot = ll;
quicksort(l, pivot - 1);
quicksort(pivot + 1, r);
}
}
int main()
{
int i;
in = fopen("algsort.in", "r");
out = fopen("algsort.out", "w");
srand(time(NULL));
fscanf(in, "%d", &N);
for(i = 0; i < N; ++i)
fscanf(in, "%d", &v[i]);
quicksort(0, N-1);
for(i = 0; i < N; ++i)
fprintf(out, "%d ", v[i]);
fprintf(out, "\n");
fclose(in);
fclose(out);
return 0;
}