Great question!
In my experience, a programmer is isolated to just programming. Software engineering involves requirements, implementation (programming), testing, project management, design, etc. A software engineer should know the best practices in each of these domains and be able to do them if called upon, although they usually specialize in one (especially programming).
I haven't seen any algorithmic job titles, but they probably exist in the R & D and academic domain since most intense algorithms (sorting) are baked into frameworks in commercial development.
I'm thinking a systems analyst is more in line with Systems Engineering, which looks at systems that include software, but are not all software. A good example is the 747. There is a lot of software in there, but it takes a systems engineer to look at the complete picture of wings, wheels, software, etc.