Pagini recente » Cod sursa (job #1023120) | Cod sursa (job #1899735) | Cod sursa (job #1375580) | Cod sursa (job #230249) | Cod sursa (job #1735271)
#include <cstdio>
#include<ctype.h>
#include<stdlib.h>
#include<time.h>
#define BUF_SIZE 4096
#define MAXN 500000
int v[MAXN+1], pos=BUF_SIZE, n;
char buf[BUF_SIZE];
inline char getChar(FILE *f)
{
if(pos==BUF_SIZE) pos=0, fread(buf, 1, BUF_SIZE, f);
return buf[pos++];
}
inline int getInt(FILE *f)
{
char c;
int nr=0;
while(!isdigit(c)) c=getChar(f);
while(isdigit(c)) nr=nr*10+c-'0', c=getChar(f);
return nr;
}
inline void swap1(int a, int b)
{
int aux=v[a];
v[a]=v[b];
v[b]=aux;
}
inline int pivotare(int p, int q)
{
int i, x=v[q];
i=p-1;
for(int j=p; j<q; ++j)
if(v[j] < x)
i++, swap1(i, j);
swap1(i+1, q);
return i+1;
}
inline int randomp(int p, int q)
{
int l=q-p+1, r;
r=rand() % l;
swap1(p+r, q);
return pivotare(p, q);
}
void QuickSort(int p, int q)
{
int r;
if(p < q)
{
r=randomp(p, q);
QuickSort(p, r-1);
QuickSort(r+1, q);
}
}
int main()
{
srand(time(0));
FILE *fin, *fout;
fin=fopen("algsort.in", "r");
fout=fopen("algsort.out", "w");
n=getInt(fin);
for(int i=1;i<=n;++i)
v[i]=getInt(fin);
QuickSort(1, n);
for(int i=1;i<=n;++i)
fprintf(fout, "%d ", v[i]);
fclose(fin);
fclose(fout);
return 0;
}