Mai intai trebuie sa te autentifici.
Cod sursa(job #1043899)
| Utilizator | Data | 29 noiembrie 2013 00:07:06 | |
|---|---|---|---|
| Problema | Sortare prin comparare | Scor | 40 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.81 kb |
#include<fstream>
#include<cmath>
#define dim 500100
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
long v[dim],s[dim];
long Lung,l,i,j,minu,minu2,n,stop,pos;
inline long minim(long a,long b) {
if(a<b)
return a;
return b;
}
int main () {
f>>n;
l=sqrt(n);
for(i=0;i<n;++i){
f>>v[i];
pos=i/l;
if(!s[pos])
s[pos]=v[i];
else
s[pos]=minim(s[pos],v[i]);
}
Lung=(n)/l;
for(i=0;i<n;++i) {
minu=99999999;
for(j=0;j<=Lung;++j) {
if(s[j]<minu){
minu=s[j];
pos=j;
}
}
g<<minu<<" ";
stop=0;
minu2=99999999;
for(j=l*(pos);j<(pos+1)*l && j<n;++j) {
if(v[j]==minu && stop==0) {
v[j]=9999999;
stop=1;
}
else {
if(v[j]<=minu2) {
minu2=v[j];
}
}
}
s[pos]=minu2;
}
}