A partire da due sequenze ordinate, v1 e v2, si vuole realizzare una terza sequenza ordinata v3.
public static double[] merge(double v1[], double v2[]) { int i1=0, n1=v1.length, i2=0, n2=v2.length, i3=0, n3=n1+n2; double v3[] = new double[n3]; while(i1 < n1 && i2 < n2) { if(v1[i1] <= v2[i2]) { v3[i3]=v1[i1]; i1++; } else { v3[i3]=v2[i2]; i2++; } i3++: } while(i1 < n1) { v3[i3]=v1[i1]; i1++; i3++; } while(i2 < n2) { v3[i3]=v2[i2]; i2++; i3++; } return v3; }
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 il codice precedente in modo che i dati siano copiati, in ordine, su un array temporaneo e poi ricopiati su v, da inf a sup
public 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++; } 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]; }