|
Scambiare i valori contenuti nell'array v alle posizioni a e b static void SCAMBIA(double[] v, int a, int b) { double temp=v[a]; v[a]=v[b]; v[b]=temp; } Ordinare un array di due elementi if(v[0] > v[1]) SCAMBIA(v, 0, 1); oppure... if(v[0] > v[1]) { double temp=v[0]; v[0]=v[1]; v[1]=temp; } Ordinare un sottoarray di due elementi if(v[i] > v[i+1]) SCAMBIA(v, i, i+1); Una passataUna passata su tutte le N-1 coppie, all'interno di un array, provoca lo spostamento "in alto" della "bolla" più grande for(int i=0; i < v.length-1; i++) if(v[i] > v[i+1]) SCAMBIA(v, i, i+1); Cioè l'elemento più grande si trova in ultima posizione alla fine della passata. Bubble SortN passate, sulle N-1 coppie, ordinano sicuramente l'array static void BUBBLESORT(double[] v) { int n=v.length; for(int i=0; i < n; i++) for(int j=0; j < n-1; j++) if(v[j] > v[j+1]) SCAMBIA(v, j, j+1); } In realtà sono necessarie al massimo N-1 passate su N-i coppie static void BUBBLESORT(double[] v) { int n=v.length; for(int i=0; i < n-1; i++) for(int j=0; j < n-i-1; j++) if(v[j] > v[j+1]) SCAMBIA(v, j, j+1); } Selection SortSi può individuare il minimo e scambiarlo con il valore alla posizione 0: in questo modo l'elemento alla posizione 0 occuperà definitivamente il posto che gli spetta... int posMin=0; for(j=1; j < n; j++) if(v[j] < v[posMin]) posMin=j; SCAMBIA(v, 0, posMin); Si ripete l'operazione con il sottovettore con indice da 1 a N-1, da 2 a N-1, ... e ogni elemento andrà al posto che gli spetta. static void SELESORT(double[] v) { int n=v.length; for(int i=0; i < n-1; i++) { int posMin=i; for(j=i+1; j < n; j++) if(v[j] < v[posMin]) posMin=j; SCAMBIA(v, i, posMin); } } |
|