Supponiamo che l'array v contenga due sottoarray adiacenti ordinati (v' da inf a medio e v'' da medio+1 a sup).
Si puņ adattare l'algoritmo di fusione su tre array in modo che i dati siano copiati, in ordine, su un array temporaneo e poi ricopiati su v, da inf a sup
static void merge2(double[] v, int inf, int medio, int sup)
{
int i1=inf,
i2=medio+1,
i3=0;
double[] v3 = new double[sup-inf+1];
while(i1 <= medio && i2 <= sup)
if(v[i1] <= v[i2])
{
v3[i3]=v[i1];
i1++;
i3++;
}
else
{
v3[i3]=v[i2];
i2++;
i3++;
}
while(i1 <= medio)
{
v3[i3]=v[i1];
i1++;
i3++;
}
while(i2 <= sup)
{
v3[i3]=v[i2];
i2++;
i3++;
}
for(int i=inf; i <= sup; i++)
v[i]=v3[i-inf];
} |