$ python3 visual_sort.py
Welcome to Bubble Sort!

Original list: [5, 6, 5, 9, 1]

-- Pass #1 --

5 <= 6 -- no swap
|5||6| 5  9  1 
 5  6  5  9  1 

6 > 5 -- swap
 5 |6||5| 9  1 
 5  5  6  9  1 

6 <= 9 -- no swap
 5  5 |6||9| 1 
 5  5  6  9  1 

9 > 1 -- swap
 5  5  6 |9||1|
 5  5  6  1  9 

-- Pass #2 --

5 <= 5 -- no swap
|5||5| 6  1  9 
 5  5  6  1  9 

5 <= 6 -- no swap
 5 |5||6| 1  9 
 5  5  6  1  9 

6 > 1 -- swap
 5  5 |6||1| 9 
 5  5  1  6  9 

6 <= 9 -- no swap
 5  5  1 |6||9|
 5  5  1  6  9 

-- Pass #3 --

5 <= 5 -- no swap
|5||5| 1  6  9 
 5  5  1  6  9 

5 > 1 -- swap
 5 |5||1| 6  9 
 5  1  5  6  9 

5 <= 6 -- no swap
 5  1 |5||6| 9 
 5  1  5  6  9 

6 <= 9 -- no swap
 5  1  5 |6||9|
 5  1  5  6  9 

-- Pass #4 --

5 > 1 -- swap
|5||1| 5  6  9 
 1  5  5  6  9 

5 <= 5 -- no swap
 1 |5||5| 6  9 
 1  5  5  6  9 

5 <= 6 -- no swap
 1  5 |5||6| 9 
 1  5  5  6  9 

6 <= 9 -- no swap
 1  5  5 |6||9|
 1  5  5  6  9 

-- Pass #5 --

1 <= 5 -- no swap
|1||5| 5  6  9 
 1  5  5  6  9 

5 <= 5 -- no swap
 1 |5||5| 6  9 
 1  5  5  6  9 

5 <= 6 -- no swap
 1  5 |5||6| 9 
 1  5  5  6  9 

6 <= 9 -- no swap
 1  5  5 |6||9|
 1  5  5  6  9 

No swaps on pass 5, the list is sorted:
[1, 5, 5, 6, 9]
Bubble Sort Complete!