Pagini recente » Cod sursa (job #472480) | Cod sursa (job #1285888) | Cod sursa (job #2710548) | Cod sursa (job #2181524) | Cod sursa (job #2263606)
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<ctime>
#define MAX_N 500000
#define BUF_SIZE 1 << 18
using namespace std;
int v[MAX_N], n, pos = BUF_SIZE;
char buf[BUF_SIZE];
inline char getChar(FILE* fin) {
if(pos == BUF_SIZE) {
fread(buf,1,BUF_SIZE,fin);
pos = 0;
}
return buf[pos++];
}
inline int read(FILE* fin) {
int res = 0;
char ch;
do {
ch = getChar(fin);
}while(!isdigit(ch));
do {
res = 10*res + ch - '0';
ch = getChar(fin);
}while(isdigit(ch));
return res;
}
void readArray() {
FILE* fin = fopen("algsort.in","r");
n = read(fin);
for(int i = 0; i < n; i++)
v[i] = read(fin);
fclose(fin);
srand(time(NULL));
}
void quickSort(int Begin, int End) {
int aux, b = Begin, e = End, pivot = v[b + rand()%(e-b+1)];
while(b <= e) {
while(v[b] < pivot) b++;
while(v[e] > pivot) e--;
if(b <= e) {
aux = v[b];
v[b] = v[e];
v[e] = aux;
b++;
e--;
}
}
if(Begin < e) quickSort(Begin,e);
if(b < End) quickSort(b,End);
}
void printArray() {
FILE* fout = fopen("algsort.out","w");
for(int i = 0; i < n; i++)
fprintf(fout,"%d ",v[i]);
fprintf(fout,"\n");
fclose(fout);
}
int main() {
readArray();
quickSort(0,n-1);
printArray();
return 0;
}