Do you think these aspects can be incorporated without adding extra baggage for beginners (the primary target for this visualizations)?
Showing beginners quicksort with mutation pulls back the curtain on functional programming and reveals the wizard. Functional programming, so long as we have Von Neumann machines, is a layer of abstraction and who am I to argue with Abelson and the Sussmans that beginning programmers should be introduced to abstraction layers as quickly as possible?
- if the left arrow points to an element greater than the pivot, swap the elements under the arrows and move the right arrow one cell left
- else if the right arrow points to an element less than the pivot, swap the elements under the arrows and move the left arrow one cell right
- else if one of the arrows points at the pivot, move the other arrow towards it
until the two arrows point at the same cell, which now contains the pivot. You could show the full selection animation the first time and then just move all elements to their final places at once every subsequent time. I would also replace the random pivot selection with selecting the middle-valued element among the first, middle and last element of the array.