/* Ordina un'array con l'algoritmo quick sort L'algoritmo e' descritto nel testo di Cormen, Leiserson, Rivest, Introduzione agli algoritmi Jackson Libri Volume 1, Capitolo 8 (fino a 8.3 compreso) pagg.145-153 */ import javax.swing.JOptionPane; public class QuickSort { static int sp=3; public static void scambia(int[] v, int pos1, int pos2) { int app = v[pos1]; v[pos1] = v[pos2]; v[pos2] = app; } public static int partiziona(int[] v, int from, int to) { // le due righe seguenti realizzano la scelta random del separatore int sceltaSeparatore = from + (int)(Math.random()*(to-from+1)); scambia(v, sceltaSeparatore, from); int separatore = v[from]; int i = from+1; int j = to; while(i=separatore) j--; // ora j indica un valore minore di separatore // oppure i e' maggiore di j if(iseparatore) i--; // posiziona correttamente il separatore scambia(v, i, from); return i; } public static void quickSort(int[] v, int from, int to) { // ordina l'intervallo da from a to, estremi inclusi if(from>=to) return; else { int separazione=partiziona(v, from, to); // le chiamate a printlnArray servono solo a mostrare graficamente il funzionamento dell'algoritmo printlnArray(v, separazione); printlnArrayPivot(v, from, separazione, to); quickSort(v, from, separazione-1); quickSort(v, separazione+1, to); } } public static void sort(int[] v) { quickSort(v, 0, v.length-1); } public static int[] randomArray() { int[] a=new int[26]; for(int i=0; i