Corso di Programmazione in Java – Esercizio n° 005 Esercizio n° 005 Problema dell’ordinamento di un array: Il metodo Bubble Sort. Istituto Statale di Istruzione Superiore “F. Enriques” Corso di Programmazione in Java – Esercizio n° 005 L’ordinamento di un array: Bubble Sort Da un array di 10 elementi di tipo int, si vuole restituire lo stesso array ordinato in ordine crescente. Fornire sia il diagramma di flusso che il relativo codice Java. Quindi: Se in input abbiamo Es. array[0]=15; array[1]=10; array[2]=21; array[3]=5; L’array da restituire sarà il seguente: array[0]=5; array[1]=10; array[2]=15; array[3]=21; Il problema dell’ordinamento di un array è uno dei problemi informatici più famosi: tutt’oggi ricercatori stanno studiano nuovi algoritmi con l’obiettivo di trovare il metodo più veloce. Noi vedremo uno dei metodi classici: l’algoritmo Bubble Sort Istituto Statale di Istruzione Superiore “F. Enriques” Corso di Programmazione in Java – Esercizio n° 005 Come funziona il metodo Bubble Sort Dato un array si prende l’elemento nella prima posizione e lo si confronta con quello in seconda posizione. Se il primo è maggiore del secondo, si scambiano di posizione; altrimenti si prosegue confrontando il secondo elemento con il terzo e così via… Es.: supponiamo di voler ordinare questo array: 15 6 4 10 11 15 6 4 10 11 2 6 4 10 15 11 2 6 15 4 10 11 2 6 4 10 11 15 2 6 4 15 10 11 2 6 4 10 11 2 15 2 Quando raggiungo la fine dell’array l’elemento più grande è stato messo in ultima posizione; a questo punto riparto da primo e ripeto la stessa procedura, fermandomi al penultimo elemento dell’array.. Istituto Statale di Istruzione Superiore “F. Enriques” Corso di Programmazione in Java – Esercizio n° 005 Soluzione dell’esercizio n° 005 Istituto Statale di Istruzione Superiore “F. Enriques” Corso di Programmazione in Java – Esercizio n° 005 Diagramma di flusso del Bubble Sort Inizio i=0 temp = 0 i < j-1 falso Array x j = lunghezza array-1 j>0 falso Fine falso vero x[i] > x[i+1] vero temp = x[i] x[i] = x[i+1] vero x[i+1] = temp j= j-1 Istituto Statale di Istruzione Superiore “F. Enriques” i= i + 1 Corso di Programmazione in Java – Esercizio n° 005 Traduzione in Java del D.d.F. public void main (String[] args) { int prova [] = {5,18,46,52,83,37,22,51,3,61}; int temp = 0; int j = prova.length; System.out.print(“Array non ordinato: ”); for (i=0; i<prova.lenght; i++) System.out.print(“ ” + prova[i] ); while ( j > 0 ){ for ( int i = 0; i < j-1; i++ ){ if ( prova[i] > prova[i+1] ){ temp = prova[i]; prova[i] = prova[i+1]; prova[i+1] = temp; }; }; j--; }; System.out.print(“Array ordinato: ”); for (i=0; i<prova.lenght; i++) System.out.print(“ ” + prova[i]); }; Istituto Statale di Istruzione Superiore “F. Enriques” Corso di Programmazione in Java – Esercizio n° 005 Bubble Sort in azione j 5 5 5 5 5 i 0 1 2 3 4 Array Corrente 15 6 4 10 11 2 6 15 4 10 11 2 6 4 15 10 11 2 6 4 10 15 11 2 6 4 10 11 15 2 6 4 10 11 2 15 j 4 4 3 2 1 i 0 3 3 1 0 4 4 4 4 2 Array Corrente 6 10 11 2 6 10 2 11 6 2 10 11 2 6 10 11 4 6 10 11 15 15 15 15 15 Nella tabella sono indicati i valori degli indici i e j del passo corrispondente, relativi al codice Java della diapositiva precedente. Sono inoltre evidenziati i valori che vengono scambiati. Istituto Statale di Istruzione Superiore “F. Enriques”