Un algoritmo efficiente per ordinare un array è l'ordinamento per fusione (merge sort).
Viene qui proposta una implementazione più semplice (anche se leggermente meno efficiente) di
quella riportata sul testo e disponibile in MergeSort.java
Il metodo risolutivo ha signature
public static void ordina(double[] v)
ed esegue i seguenti passi:
- se l'array parametro ha lunghezza minore o uguale a 1 allora il metodo termina con un semplice
return
- altrimenti viene decomposto l'array in due metà, si ordinano ricorsivamente le due met` e poi si fondono le due metà ordinate nel vettore di partenza:
- definire e allocare due array
v1
e v2
, in modo che la somma delle loro lunghezze sia proprio v.length
;
- copiare la prima porzione di
v
in v1
;
- copiare la pparte rimanente di
v
in v2
;
- chiamata ricorsiva su
v1
:
ordina(v1);
- chiamata ricorsiva su
v2
:
ordina(v2);
- fusione di
v1
e v2
in v
:
fusione(v1, v2, v)
usando un metodo leggeremente modifocato rispetto a quello già visto, poiché
ora l'array risultato NON deve essere allocato da fusione
ma viene passato come parametro;
return;
La soluzione è disponibile in MergeSortSemplice.java