Loop through the list multiple times.
On each pass, compare adjacent items and swap if needed.
Largest unsorted item moves to the end each pass.
Stop when a pass has no swaps.
Repeatedly push the largest unsorted item to the end by swapping adjacent pairs.