Pagini recente » Cod sursa (job #1960184) | Cod sursa (job #713772) | Cod sursa (job #1138990) | Cod sursa (job #2186006) | Cod sursa (job #1301919)
#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;
}