/* */ import javax.swing.JOptionPane; public class Selection { 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 quickSelection(int[] v, int from, int to, int rank) { // posiziona correttamente l'elemento con rank richiesto. Si assume che from <= rank <= to if(from>=to) return; else { int separazione=partiziona(v, from, to); printlnArray(v, separazione); if(separazione==rank) return; else if(separazione > rank) { printlnArray(v, from, separazione-1); quickSelection(v, from, separazione-1, rank); } else { printlnArray(v, separazione+1, to); quickSelection(v, separazione+1, to, rank); } } } public static int selection(int[] v, int rank) { // NON DOVREI MODIFICARE L'ARRAY!!! meglio copiarlo in un altro // array, e restituire l'int con il rank voluto invece di void quickSelection(v, 0, v.length-1, rank); } public static int[] randomArray() { int[] a=new int[26]; for(int i=0; i