Зависит от желаемого направления развития. Я бы сказал, что программистам надо, последовательно:
знать алгоритмическую сложность тех или иных конструкций, и на глаз понимать, где он потенциально может посадить большую дыру в производительности. Я сейчас не про выигрыш пары процентов скорости, а про условный o(n) вместо o(log(n)) по терабайтной базе. Не панацея, но от переписывания кучи кода спасает.
уметь типовые алгоритмы модифицировать, если задача нестандартная, или, опять же, производительность не устраивает.
Условный qsort я сейчас тоже по памяти мгновенно не напишу, да и не надо это в реальности почти никому, но вот информацией о том, что он работает со скоростью o(n*log(n)) и на почти отсортированных данных его делает обычный пузырёк пользоваться как-то приходилось.
так что учить на память не обязательно. А вот понимать базовые принципы и знать пределы скорости работы - крайне желательно.