Learnings from Beginning Algorithms by Simon Harris and James Ross.