Quicksort
Now look at the case where we have a
randomly ordered list and pick reasonably
good pivot values that divide the list almost
equally in two.
This will require fewer recursive calls (either
log2N or 1+log2N recursive calls).
Each call requires M comparisons and at most
M exchanges, where M is the number of
elements in the unsorted area and is less than
N-1.