Here is what I learned:
For theoretical knowledge start with "Introduction to Algorithm", and then for advanced topics read Tardos and Kleinberg "Algorithm design" book (and try to solve all the problems). I specially like Kleinberg writing style.
If you have the guts and patience (and mathematical skill, don't be ashamed if you don't have the mathematical talent, many people don't have and those people only buy knuth books and never read) then instead of CLR book read Knuth, start with reading volume 1 and 3, volume 2 has more mathematics then algorithm.
Chapter 2 is data structure and chapter 5,6 is searching and sorting.
But take knuth books with a pinch of salt. In the time you finish 2 knuth books you can finish 4 normal algorithm books. And also there are other great algorithm books to read like "Randomized Algorithm by Motwani and Radhvan", Approximation algorithm etc.
For the implementation purpose Any good book on C++ STL is fine. Actually STL has all the good algorithm and data structure implementation. (STL Tutorial and Reference Guide: C++ Programming with the Standard Template Library) Try to get the complexity of STL implementation and guess how they have implemented, you would get lots of insight.
After reading STL and algorithm theory it's time to use them. Compete in any algorithm programming competition (topcoder etc).