Cod sursa(job #1322057)

Utilizator VladutZ94FMI Chichirau Vlad Vasile VladutZ94 Data 19 ianuarie 2015 19:10:27
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<cstdio>
#include<math.h>
#define MAX 2147483647
using namespace std;

int arr[500001], n, nrSir, m;
int sortat[500001], b[810], k=0;

int MIN(int sir)
{
    int minSir = arr[sir*m+1];
    int poz = sir*m+1;
    for (int j=sir*m+2; j<=(sir+1)*m && j<=n; j++)
        if (minSir>arr[j])
        {
            minSir=arr[j];
            poz = j;
        }
    arr[poz]=MAX;
    return minSir;
}

void MIN2()
{
    int p=0, i;
    int minSir=b[0];
    for (i=1; i<nrSir; i++)
        if (minSir>b[i])
    {
        minSir=b[i];
        p=i;
    }
    sortat[k++]=minSir;
    b[p]=MIN(p);

}

int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    int i;
    scanf("%d",&n);
    for (i=1; i<=n; i++)
        scanf("%d",&arr[i]);
    m=sqrt(n);
    nrSir=m;
    while(nrSir*m<n)
        nrSir++;
    for (i=0; i<nrSir; i++)
        b[i] = MIN(i);
    for (i=1; i<=n; i++)
        MIN2();
    for (i=0; i<n; i++)
        printf("%d ",sortat[i]);
    return 0;
}