Cod sursa(job #1058942)

Utilizator buzu.tudor67Tudor Buzu buzu.tudor67 Data 15 decembrie 2013 23:35:18
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include<fstream>
#define maxn 500005
#define inf 999999999
using namespace std;
ifstream fi("algsort.in");
ofstream fo("algsort.out");

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

int main(){
    //smenul lui Batog
    fi>>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++){
                      fi>>a[i];
                      if(a[i]<z[i/k])z[i/k]=a[i];
                     }
    
    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;}
     
     fo<<q<<" ";
     
     i=poz*k;
     z[poz]=inf;
     while(i<n && i<(poz+1)*k && a[i]!=q){
                                          if(a[i]<z[poz]) z[poz]=a[i];
                                          i++;
                                         }
     a[i]=inf;
     while(i<n && i<(poz+1)*k){
                               if(a[i]<z[poz]) z[poz]=a[i];
                               i++;
                              }
    }
    
    fi.close();
    fo.close();
    return 0;
}