A concise and practical introduction to programming algorithms in Java - Nielsen, Frank. (Springer, 2009)