codice:
#include <stdio.h>
#include <stdlib.h>
#define DIM 6
#define DIMT 7
typedef struct {long key;
char qc[9];
long link; } ELE;
typedef ELE VET[DIMT];
ELE elPos(VET X, int pos, ELE dum)
{
if(pos != -2)
return X[pos];
else
return dum;
}
void Scrivi(VET X, ELE el, int pos, ELE *dm)
{
if (pos != -2)
X[pos] = el;
else
*dm = el;
}
long RMERGE (VET X, long Sx, long Dx)
{ long i,j,z,d;
ELE dum, ELi, ELj, ELz;
d = -2; dum.link=-1;
i = Sx; j = Dx; z = d;
while (i != -1 && j != -1)
{ ELi = elPos(X,i,dum); ELj = elPos(X,j,dum);
if(ELi.key <= ELj.key)
{ ELz = elPos(X,z,dum);
ELz.link = i; Scrivi(X, ELz, z, &dum);
z=i; i=ELi.link;}
else
{ ELz = elPos(X,z,dum);
ELz.link = j; Scrivi(X, ELz, z, &dum);
z=j; j=ELj.link;}
}
if (i==-1) ELz.link = j;
else ELz.link = i;
Scrivi(X, ELz, z,&dum);
return dum.link;
}
long RMSORT (VET X,long l,long u)
{ long meta,Sx, Dx,P;
if (l >= u ) P = l;
else { meta = (l+u)/2;
Sx = RMSORT(X,l,meta);
Dx = RMSORT(X,meta+1,u);
P = RMERGE(X,Sx,Dx);}
return P;
}
int main()
{
VET v={{8,"",-1},{16,"",-1},{-3,"",-1},
{36,"",-1}, {27,"",-1},{36,"",-1}};
long testa,i;
testa = RMSORT(v,0,DIM-1);
for(i=testa; i!=-1; )
{
printf("K=%ld L=%ld\n",v[i].key, v[i].link);
i = v[i].link;
}
system("pause");return 0;
}