Cod sursa(job #1039701)

Utilizator Catalina_BrinzaBrinza Catalina Catalina_Brinza Data 23 noiembrie 2013 14:14:55
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.5 kb
//
//  main.cpp
//  sort-batog
//
//  Created by Catalina Brinza on 11/21/13.
//  Copyright (c) 2013 Catalina Brinza. All rights reserved.
//


#include <fstream>
#include <vector>
#include <math.h>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int main(int argc, const char * argv[])
{vector <int> a;
    int n,i,x,k,min,j,l,m=0;
    vector <int> s;
    vector <int> v;

    f>>n;
    k=sqrt(n);
 int ultim=n/k;
    if (n%k!=0) ++ultim;
    m=n;
    for (i=0;i<ultim;++i)
    {
        for (j=0;j<k;++j)
        {
            f>>x;
            a.push_back(x);m--;
            if (j==0) s.push_back(x);
            else if (a[n-m-1]<s[i]) s[i]=a[n-m-1];
            if (m==0) break;
        }
        if (m==0) break;
    }
    

    
    while (v.size()!=n)
    {
        int minnou=INT_MAX;min=INT_MAX; j=0;
        bool ok2=false;
    for (i=0;i<ultim;i++)
        if (s[i]<min && s[i]!=-1) {min=s[i]; j=i;ok2=true;}
      
        if (ok2) v.push_back(min);
        else break;
        bool ok=false;ok2=false;
        if (j!=ultim-1)
        {for (l=j*k;l<(j+1)*k;++l)
            if (a[l]==min && !ok) {a[l]=-1;ok=true;}
            else if (a[l]<minnou && a[l]!=-1) {minnou=a[l]; ok2=true;}}
        else for (l=j*k;l<n;++l)
        { if (a[l]==min && !ok) {a[l]=-1;ok=true;}
                else if (a[l]<minnou && a[l]!=-1) {minnou=a[l]; ok2=true;}
        }
       
        if (!ok2) s[j]=-1;
        else s[j]=minnou;
       
    }
   
    for (i=0;i<n;++i)
        g<<v[i]<<' ';
    return 0;
}