Основы ООП, теория графов, теория множеств, двоичная система счисления, матрицы (в основном для работ с массивами). Почитай обо всем этом в гугле. Если не поймешь (хотя бы примерно), то языки программирования тебе вообще не нужны. А если поймешь, то бери любой понравившийся.
Для начала - Вирт, "Алгоритмы и структуры данных", последнее издание или Кормен, "Алгоритмы. Вводный курс".
Дальше - Кнут, "Конкретная математика". Это не алгоритмы, но математика, необходимая для понимания алгоритмов.
А уже после этого Кнут "Искусство программирования" или Кормен "Алгоритмы. Построение и анализ".
Немного в сторону, но тоже полезно: Уоррен мл., "Алгоритмические трюки для программистов".