One of my favorite projects, this was designed to efficiently and effectively teach sorting algorithms to people who couldn't easily visualize what was happening by reading log outputs. The user chooses which algorithm they'd like to see in action, then the blocks fly around, showing a step-by-step representation of what happens when each algorithm runs.
I currently have BubbleSort, QuickSort, and SelectionSort implemented, with plans to add more.
In an effort to accomodate the slowest and fastest learner, I created options where the user can speed up or slow dow the simulation. They can also supply their own numbers and mix up the existing ones.