There are a number of different definitions of the term "algorithm." My present thoughts are an extension of the work of Noson Yanofsky.
"Programs" decompose desired functionality into a complete sequence of exact operations like: if then else,
equals, add, subtract, multiply, divide, greater than, less than, unequal, AND, OR, for next, goto, do while, do until, etc. These operate on real numbers, integers, vectors, matrices, character strings, etc. Programs are executable in some programming language.
"Algorithms" decompose desired functionality in terms of an incomplete description using informal operations (perhaps in pseudo code) like: look up, insert, replace, return, etc. These operate on models, states, goals, sets, costs, sequences, etc. Many different programs (in the same or different programming languages) may implement the same algorithm.
Algorithms are a stage in the refinement process from an informal specification toward the creation of an executable program.