Pagini recente » Cod sursa (job #1947931) | Cod sursa (job #103307) | Monitorul de evaluare | Cod sursa (job #1025393) | Cod sursa (job #1735295)
#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;
}
void QuickSort(int st, int dr)
{
int p=st, q=dr, pivot=v[st + rand()%(dr-st+1)];
while(p<=q)
{
while(v[p] < pivot) ++p;
while(v[q] > pivot) --q;
if(p<=q) swap1(p, q), ++p, --q;
}
if(st < q) QuickSort(st, q);
if(p < dr) QuickSort(p, dr);
}
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;
}