Algorithms in C++, Parts 1-4 by Robert Sedgewick