Cod sursa(job #1058961)

Utilizator buzu.tudor67Tudor Buzu buzu.tudor67 Data 15 decembrie 2013 23:58:25
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<cstdio>
#define maxn 500005
#define inf (1<<31)-1
using namespace std;
FILE *fi=fopen("algsort.in","r");
FILE *fo=fopen("algsort.out","w");

int i,n,a[maxn],z[maxn];
int k,q,poz,j,r;

int main(){
    //smenul lui Batog
    fscanf(fi,"%d",&n); k=1;
    while(k*k<n)k++;// impart vectorul in intervale de lungime sqrt(n)
    
    for(i=0;i<k;i++) z[i]=inf;
    for(i=0;i<n;i++){
                      fscanf(fi,"%d",&a[i]);
                      if(a[i]<z[i/k])z[i/k]=a[i];
                     }
    fclose(fi);
    
    for(j=0;j<n;j++)
    {
     poz=0; q=inf;
     for(i=0;i<k;i++) if(z[i]<q){q=z[i]; poz=i;}
     
     fprintf(fo,"%d ",q);
     
     i=poz*k; z[poz]=inf; 
     if(n<(poz+1)*k) r=n; else r=(poz+1)*k;
     
     for(;i<r && a[i]!=q;i++) if(a[i]<z[poz]) z[poz]=a[i];
    
     a[i]=inf;
     for(;i<r;i++) if(a[i]<z[poz]) z[poz]=a[i];
    }
    
    fclose(fo);
    return 0;
}