Bubble Sort
Sorting - Ordinamento Sorting takes an unordered collection and makes it an ordered one. 1 2 3 4 5 6 77 42 35 12 101 5 1 2 3 4 5 6 5 12 35 42 77 101
"Bubbling Up" the Largest Element Traverse a collection of elements Move from the front to the end “Bubble” the largest value to the end using pair-wise comparisons and swapping (Scorrere l’elenco) (dal primo all’ultimo) (spingendo l’elemento più pesante verso il fondo usando confronti e scambi fra coppie ) 1 2 3 4 5 6 77 42 35 12 101 5
"Bubbling Up" the Largest Element Scorriamo l’elenco a partire dal primo fino all’ultimo Confrontiamo: ciascun elemento con il suo successore Se il successivo è minore => scambio! Swap 1 2 3 4 5 6 42 77 77 42 35 12 101 5
"Bubbling Up" the Largest Element Scorriamo l’elenco a partire dal primo fino all’ultimo Confrontiamo: ciascun elemento con il suo successore Se il successivo è minore => scambio! 1 2 3 4 5 6 Swap 35 77 42 77 35 12 101 5
"Bubbling Up" the Largest Element Scorriamo l’elenco a partire dal primo fino all’ultimo Confrontiamo: ciascun elemento con il suo successore Se il successivo è minore => scambio! 1 2 3 4 5 6 Swap 12 77 42 35 77 12 101 5
"Bubbling Up" the Largest Element Scorriamo l’elenco a partire dal primo fino all’ultimo Confrontiamo: ciascun elemento con il suo successore Se il successivo è minore => scambio! 1 2 3 4 5 6 42 35 12 77 101 5 No need to swap
"Bubbling Up" the Largest Element Scorriamo l’elenco a partire dal primo fino all’ultimo Confrontiamo: ciascun elemento con il suo successore Se il successivo è minore => scambio! 1 2 3 4 5 6 Swap 5 101 42 35 12 77 101 5
"Bubbling Up" the Largest Element Scorriamo l’elenco a partire dal primo fino all’ultimo Confrontiamo: ciascun elemento con il suo successore Se il successivo è minore => scambio! 1 2 3 4 5 6 101 42 35 12 77 5 Largest value correctly placed
Items of Interest Soltanto il valore maggiore è al posto giusto Tutti gli altri sono fuori posto E’ necessario ripetere il processo 1 2 3 4 5 6 101 42 35 12 77 5 Largest value correctly placed
Repeat “Bubble Up” How Many Times? Se abbiamo N elementi… E ad ogni iterazione posizioniamo correttamente un elemento… Allora ripetiamo il processo di “bubble up” process N – 1 volte.
“Bubbling” All the Elements 77 12 35 42 5 1 2 3 4 5 6 101 N - 1 5 42 12 35 77 1 2 3 4 5 6 101 42 5 35 12 77 1 2 3 4 5 6 101 42 35 5 12 77 1 2 3 4 5 6 101 42 35 12 5 77 1 2 3 4 5 6 101
Reducing the Number of Comparisons 12 35 42 77 101 1 2 3 4 5 6 5 77 12 35 42 5 1 2 3 4 5 6 101 5 42 12 35 77 1 2 3 4 5 6 101 42 5 35 12 77 1 2 3 4 5 6 101 42 35 5 12 77 1 2 3 4 5 6 101
Reducing the Number of Comparisons Alla J-esima iterazione di “bubble up”, è necessario fare soltanto N-J confronti. Ad esempio: Alla quarta iterazione (J=4) N è 6 Dobbiamo fare soltanto 2 confronti 42 5 35 12 77 1 2 3 4 5 6 101
Already Sorted Collections? Che succede se la sequenza è già ordinata? Che cosa succede se soltanto alcune coppie sono fuori posto e dopo qualche giro l’elenco è già ordinato? Vogliamo accorgerci che la sequenza è già ordinata e fermarci! 42 35 12 5 77 1 2 3 4 5 6 101
Using a Boolean “Flag” Una variabile booleana (Flag): durante un’iterazione di “bubble up” abbiamo fatto uno scambio (oppure no) Se non ci sono stati scambi: La sequenza è già ordinata! La variabile “Flag” va re-impostata ad ogni nuova iterazione!
An Animated Example N 8 did_swap true to_do 7 index 98 23 45 14 6 67 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap false to_do 7 index 1 98 23 45 14 6 67 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap false to_do 7 index 1 Swap 98 23 45 14 6 67 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 1 Swap 23 98 45 14 6 67 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 2 23 98 45 14 6 67 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 2 Swap 23 98 45 14 6 67 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 2 Swap 23 45 98 14 6 67 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 3 23 45 98 14 6 67 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 3 Swap 23 45 98 14 6 67 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 3 Swap 23 45 14 98 6 67 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 4 23 45 14 98 6 67 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 4 Swap 23 45 14 98 6 67 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 4 Swap 23 45 14 6 98 67 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 5 23 45 14 6 98 67 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 5 Swap 23 45 14 6 98 67 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 5 Swap 23 45 14 6 67 98 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 6 23 45 14 6 67 98 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 6 Swap 23 45 14 6 67 98 33 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 6 Swap 23 45 14 6 67 33 98 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 7 23 45 14 6 67 33 98 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 7 Swap 23 45 14 6 67 33 98 42 1 2 3 4 5 6 7 8
An Animated Example N 8 did_swap true to_do 7 index 7 Swap 23 45 14 6 67 33 42 98 1 2 3 4 5 6 7 8
After First Pass of Outer Loop N 8 did_swap true to_do 7 Finished first “Bubble Up” index 8 23 45 14 6 67 33 42 98 1 2 3 4 5 6 7 8
The Second “Bubble Up” N 8 did_swap false to_do 6 index 1 23 45 14 6 67 33 42 98 1 2 3 4 5 6 7 8
The Second “Bubble Up” N 8 did_swap false to_do 6 index 1 No Swap 23 45 14 6 67 33 42 98 1 2 3 4 5 6 7 8
The Second “Bubble Up” N 8 did_swap false to_do 6 index 2 23 45 14 6 67 33 42 98 1 2 3 4 5 6 7 8
The Second “Bubble Up” N 8 did_swap false to_do 6 index 2 Swap 23 45 14 6 67 33 42 98 1 2 3 4 5 6 7 8
The Second “Bubble Up” N 8 did_swap true to_do 6 index 2 Swap 23 14 45 67 33 42 98 1 2 3 4 5 6 7 8
The Second “Bubble Up” N 8 did_swap true to_do 6 index 3 23 14 45 6 67 33 42 98 1 2 3 4 5 6 7 8
The Second “Bubble Up” N 8 did_swap true to_do 6 index 3 Swap 23 14 45 67 33 42 98 1 2 3 4 5 6 7 8
The Second “Bubble Up” N 8 did_swap true to_do 6 index 3 Swap 23 14 6 45 67 33 42 98 1 2 3 4 5 6 7 8
The Second “Bubble Up” N 8 did_swap true to_do 6 index 4 23 14 6 45 67 33 42 98 1 2 3 4 5 6 7 8
The Second “Bubble Up” N 8 did_swap true to_do 6 index 4 No Swap 23 14 45 67 33 42 98 1 2 3 4 5 6 7 8
The Second “Bubble Up” N 8 did_swap true to_do 6 index 5 23 14 6 45 67 33 42 98 1 2 3 4 5 6 7 8
The Second “Bubble Up” N 8 did_swap true to_do 6 index 5 Swap 23 14 6 45 67 33 42 98 1 2 3 4 5 6 7 8
The Second “Bubble Up” N 8 did_swap true to_do 6 index 5 Swap 23 14 6 45 33 67 42 98 1 2 3 4 5 6 7 8
The Second “Bubble Up” N 8 did_swap true to_do 6 index 6 23 14 6 45 33 67 42 98 1 2 3 4 5 6 7 8
The Second “Bubble Up” N 8 did_swap true to_do 6 index 6 Swap 23 14 6 45 33 67 42 98 1 2 3 4 5 6 7 8
The Second “Bubble Up” N 8 did_swap true to_do 6 index 6 Swap 23 14 6 45 33 42 67 98 1 2 3 4 5 6 7 8
After Second Pass of Outer Loop 8 did_swap true to_do 6 Finished second “Bubble Up” index 7 23 14 6 45 33 42 67 98 1 2 3 4 5 6 7 8
The Third “Bubble Up” N 8 did_swap false to_do 5 index 1 23 14 6 45 33 42 67 98 1 2 3 4 5 6 7 8
The Third “Bubble Up” N 8 did_swap false to_do 5 index 1 Swap 23 14 6 45 33 42 67 98 1 2 3 4 5 6 7 8
The Third “Bubble Up” N 8 did_swap true to_do 5 index 1 Swap 14 23 6 45 33 42 67 98 1 2 3 4 5 6 7 8
The Third “Bubble Up” N 8 did_swap true to_do 5 index 2 14 23 6 45 33 42 67 98 1 2 3 4 5 6 7 8
The Third “Bubble Up” N 8 did_swap true to_do 5 index 2 Swap 14 23 6 45 33 42 67 98 1 2 3 4 5 6 7 8
The Third “Bubble Up” N 8 did_swap true to_do 5 index 2 Swap 14 6 23 45 33 42 67 98 1 2 3 4 5 6 7 8
The Third “Bubble Up” N 8 did_swap true to_do 5 index 3 14 6 23 45 33 42 67 98 1 2 3 4 5 6 7 8
The Third “Bubble Up” N 8 did_swap true to_do 5 index 3 No Swap 14 6 23 45 33 42 67 98 1 2 3 4 5 6 7 8
The Third “Bubble Up” N 8 did_swap true to_do 5 index 4 14 6 23 45 33 42 67 98 1 2 3 4 5 6 7 8
The Third “Bubble Up” N 8 did_swap true to_do 5 index 4 Swap 14 6 23 45 33 42 67 98 1 2 3 4 5 6 7 8
The Third “Bubble Up” N 8 did_swap true to_do 5 index 4 Swap 14 6 23 33 45 42 67 98 1 2 3 4 5 6 7 8
The Third “Bubble Up” N 8 did_swap true to_do 5 index 5 14 6 23 33 45 42 67 98 1 2 3 4 5 6 7 8
The Third “Bubble Up” N 8 did_swap true to_do 5 index 5 Swap 14 6 23 33 45 42 67 98 1 2 3 4 5 6 7 8
The Third “Bubble Up” N 8 did_swap true to_do 5 index 5 Swap 14 6 23 33 42 45 67 98 1 2 3 4 5 6 7 8
After Third Pass of Outer Loop N 8 did_swap true to_do 5 Finished third “Bubble Up” index 6 14 6 23 33 42 45 67 98 1 2 3 4 5 6 7 8
The Fourth “Bubble Up” N 8 did_swap false to_do 4 index 1 14 6 23 33 42 45 67 98 1 2 3 4 5 6 7 8
The Fourth “Bubble Up” N 8 did_swap false to_do 4 index 1 Swap 14 6 23 33 42 45 67 98 1 2 3 4 5 6 7 8
The Fourth “Bubble Up” N 8 did_swap true to_do 4 index 1 Swap 6 14 23 33 42 45 67 98 1 2 3 4 5 6 7 8
The Fourth “Bubble Up” N 8 did_swap true to_do 4 index 2 6 14 23 33 42 45 67 98 1 2 3 4 5 6 7 8
The Fourth “Bubble Up” N 8 did_swap true to_do 4 index 2 No Swap 6 14 23 33 42 45 67 98 1 2 3 4 5 6 7 8
The Fourth “Bubble Up” N 8 did_swap true to_do 4 index 3 6 14 23 33 42 45 67 98 1 2 3 4 5 6 7 8
The Fourth “Bubble Up” N 8 did_swap true to_do 4 index 3 No Swap 6 14 23 33 42 45 67 98 1 2 3 4 5 6 7 8
The Fourth “Bubble Up” N 8 did_swap true to_do 4 index 4 6 14 23 33 42 45 67 98 1 2 3 4 5 6 7 8
The Fourth “Bubble Up” N 8 did_swap true to_do 4 index 4 No Swap 6 14 23 33 42 45 67 98 1 2 3 4 5 6 7 8
After Fourth Pass of Outer Loop N 8 did_swap true to_do 4 Finished fourth “Bubble Up” index 5 6 14 23 33 42 45 67 98 1 2 3 4 5 6 7 8
The Fifth “Bubble Up” N 8 did_swap false to_do 3 index 1 6 14 23 33 42 45 67 98 1 2 3 4 5 6 7 8
The Fifth “Bubble Up” N 8 did_swap false to_do 3 index 1 No Swap 6 14 23 33 42 45 67 98 1 2 3 4 5 6 7 8
The Fifth “Bubble Up” N 8 did_swap false to_do 3 index 2 6 14 23 33 42 45 67 98 1 2 3 4 5 6 7 8
The Fifth “Bubble Up” N 8 did_swap false to_do 3 index 2 No Swap 6 14 23 33 42 45 67 98 1 2 3 4 5 6 7 8
The Fifth “Bubble Up” N 8 did_swap false to_do 3 index 3 6 14 23 33 42 45 67 98 1 2 3 4 5 6 7 8
The Fifth “Bubble Up” N 8 did_swap false to_do 3 index 3 No Swap 6 14 23 33 42 45 67 98 1 2 3 4 5 6 7 8
After Fifth Pass of Outer Loop N 8 did_swap false to_do 3 Finished fifth “Bubble Up” index 4 6 14 23 33 42 45 67 98 1 2 3 4 5 6 7 8
Finished “Early” N 8 did_swap false to_do 3 We didn’t do any swapping, so all of the other elements must be correctly placed. We can “skip” the last two passes of the outer loop. index 4 6 14 23 33 42 45 67 98 1 2 3 4 5 6 7 8
Summary “Bubble Up” algorithm will move largest value to its correct location (to the right) Repeat “Bubble Up” until all elements are correctly placed: Maximum of N-1 times Can finish early if no swapping occurs We reduce the number of elements we compare each time one is correctly placed