/** Ordinatore per fusione @author Adriano Luchetta @version 28-11-2003 */ public class Ordinatore { Comparable[] lista; // costruttore public Ordinatore(Comparable[] array) { lista = array; } /** ordina usando l'algoritmo di ordinamento per fusione */ public void ordina() { ordina(lista); } // algoritmo ricorsivo di ordinamento per fusione private void ordina(Comparable[] arr) { if (arr.length == 1) return; int m = arr.length / 2; Comparable[] sx = new Studente[m]; for (int i = 0; i < m; i++) sx[i] = arr[i]; Comparable[] dx = new Studente[arr.length - m]; for (int i = 0; i < arr.length - m; i++) dx[i] = arr[m + i]; ordina(sx); ordina(dx); fondi(arr, sx, dx); } // fusione di due array ordinati private void fondi(Comparable[] arr, Comparable[] left, Comparable[] right) { int iList = 0; int iL = 0; int iR = 0; while (iL < left.length && iR < right.length) { if (left[iL].compareTo(right[iR]) < 0) arr[iList++] = left[iL++]; else arr[iList++] = right[iR++]; } while (iL < left.length) arr[iList++] = left[iL++]; while (iR < right.length) arr[iList++] = right[iR++]; } }