Pagini recente » Cod sursa (job #1635294) | Cod sursa (job #2224404) | Cod sursa (job #1743942) | Cod sursa (job #752413) | Cod sursa (job #2540428)
#include <bits/stdc++.h>
#define cin fin
#define cout fout
using namespace std;
FILE *fin = fopen ("algsort.in", "r");
FILE *fout = fopen ("algsort.out", "w");
int n;
int v[500005];
char buff[100000];
int pp;
int numar(){
int val=0;
while(!(buff[pp]>='0' && buff[pp]<='9')){
pp++;
if(pp==100000){
fread(buff,1,100000,fin);
pp=0;
}
}
while(buff[pp]>='0' && buff[pp]<='9'){
val=val*10+buff[pp]-'0';
pp++;
if(pp==100000){
fread(buff,1,100000,fin);
pp=0;
}
}
return val;
}
int poz (int st, int dr){
int j, x;
x = st + rand ()%(dr - st + 1);
swap (v[x], v[st]);
j = 0;
while (st < dr){
if (v[st] > v[dr]){
swap (v[st], v[dr]);
j = 1 - j;
}
st += j;
dr -= 1 - j;
}
return st;
}
void cuicsort (int st, int dr){
if (st < dr){
int p = poz (st, dr);
cuicsort (st, p - 1);
cuicsort (p + 1, dr);
}
}
int main(){
n = numar();
for (int i=1; i<=n; i++){
v[i] = numar();
}
for (int i=n; i ;i--)
swap(v[rand()*1LL*rand()%i+1], v[i]);
srand (time(0));
cuicsort (1, n);
for (int i=1; i<=n; i++){
fprintf (fout, "%d ", v[i]);
}
return 0;
}