Algorithms In Java by Robert Sedgewick