Cod sursa(job #2272332)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 29 octombrie 2018 23:49:53
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>//Sortare cu Batog
#include <fstream>
#include <cmath>
#define INF 2147483647
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int a[500001],n,bucata[1001],index=-1,k;
void update(int poz)
{
    int i,start;
    a[poz]=INF;
    start=k*(poz/k);
    bucata[poz/k]=poz;
    for(i=start;i<=start+k-1;i++)
    {
        if(a[bucata[poz/k]]>a[i])
        {
            bucata[poz/k]=i;
        }
    }
}
int query(int st,int dr)
{
    int minim;
    minim=st;
    while(st<dr && st%k!=0 && st!=0)
    {
        if(a[minim]>a[st])
        {
            minim=st;
        }
        st++;
    }
    while(st+k<=dr)
    {
        if(a[minim]>a[bucata[st/k]])
        {
            minim=bucata[st/k];
        }
        st=st+k;
    }
    while(st<=dr)
    {
        if(a[minim]>a[st])
        {
            minim=st;
        }
        st++;
    }
    return minim;
}
int main()
{
    int i,poz;
    f>>n;
    k=sqrt(n);
    for(i=0;i<n;i++)
    {
        f>>a[i];
        if(i%k==0)
        {
            index++;
            bucata[index]=i;
        }
        if(a[bucata[index]]>a[i])
        {
            bucata[index]=i;
        }
    }
    for(i=0;i<n;i++)
    {
        poz=query(0,n-1);
        g<<a[poz]<<" ";
        update(poz);
    }
    return 0;
}