Pagini recente » Cod sursa (job #2288849) | Cod sursa (job #63450) | Cod sursa (job #2600993) | Cod sursa (job #3272849) | Cod sursa (job #767244)
Cod sursa(job #767244)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef unsigned int uint;
FILE *in, *out;
uint v[500001], N;
void quicksort(uint l, uint r)
{
uint aux, ll, rr, pivot;
if(l < r && r - l < 16)
{
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()
{
uint i;
in = fopen("algsort.in", "r");
out = fopen("algsort.out", "w");
srand(time(NULL));
fscanf(in, "%d", &N);
for(i = 1; i <= N; ++i)
fscanf(in, "%d", &v[i]);
quicksort(1, N);
for(i = 1; i <= N; ++i)
fprintf(out, "%d ", v[i]);
fprintf(out, "\n");
fclose(in);
fclose(out);
return 0;
}