The premise I believe is wrong, or at least relative to other concepts. Specifically, algorithms are much less important than understanding these concepts.
Abstraction -- removing redundant facts from thinking about and implementing real notions.
Modularity is the distinction between interface and implementation and the placing of things that relate to one another in some type of [pseudo]textual area.
Structures -- graphs, trees and linked structures.
Type -- What is a type? Set? Pre- and Post-conditions Contracts
How to effectively express these concepts in canonical languages that correspond to the major paradigms (e.g. C, Haskell Java/Ruby and C++).
People seem to love memorizing algorithms. It may give credence to those who are unable to think of deeper, more copy-pasteable ideas.
Nevertheless, it is worth learning algorithmic complexity, and understanding the differences between P, NP, and super-exponential issues.
It is much more important to feel and understand what a graph is, than memorizing algorithms for graphs. The former can be used to aid with the latter.