Pagini recente » Cod sursa (job #1286734) | Cod sursa (job #385708) | Cod sursa (job #1711899) | Cod sursa (job #837825) | Cod sursa (job #1322057)
#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;
}