Move Zeroes
Scan once, swap each non-zero value into the next write position, and advance that write pointer.
Move all zeroes to the end of the list while keeping the relative order of non-zero values.
Scan once, swap each non-zero value into the next write position, and advance that write pointer.
Scan once, swap each non-zero value into the next write position, and advance that write pointer.
Move all zeroes to the end of the list while keeping the relative order of non-zero values.