Cod sursa(job #1301919)

Utilizator RaileanuCristian Raileanu Raileanu Data 26 decembrie 2014 14:47:45
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include<math.h>
using namespace std;
#define M 500010
int a[M], n,i;
ifstream f1("algsort.in");
ofstream f2("algsort.out");

void sort_simpla(int a[], int st, int dr)
{
    int i,j, m;

    for (i=st; i<dr; i++)
    {
        m= i;
        for (j=i+1; j<=dr; j++)
            if (a[j]< a[m] ) m=j;
        swap(a[i],a[m] );
    }
}

void interclasare(int a[],int l, int m, int r ) // l..m , m+1,r
{
    int d[M], i= l, j=m+1, k=l;
    while (i<=m && j<=r )
        if (a[i]<= a[j] ) d[k++]=a[i++];
            else d[k++]=a[j++];

    while (i<=m ) d[k++]=a[i++];
    while (j<=r ) d[k++]=a[j++];

    for (i=l; i<=r; i++ )
        a[i]=d[i];
}

void sort_JmenBatog( int n)
{
    int lint= sqrt(n), ndiv;
    if (lint*lint<n ) lint++;
    ndiv= n/lint;
    if (ndiv*lint<n )
        ndiv++;

    sort_simpla(a,1,lint );
    for (i=1; i<ndiv; i++)
    {
        sort_simpla(a,i*lint+1,min((i+1)*lint, n ) );
        interclasare(a,(i-1)*lint+1, i*lint, min((i+1)*lint, n ) ) ;
    }

}

int main()
{
    f1>>n;
    for (i=1; i<=n; i++ )
        f1>>a[i];

    sort_JmenBatog(n);

    for (i=1; i<=n; i++)
        f2<<a[i]<<" ";
    f2.close();
    return 0;
}