An algorithm is a set of step-by-step instructions to solve a problem or complete a task. It must specify all steps clearly so a computer can follow the algorithm without additional understanding. Algorithms can be represented as pseudocode, a written informal description, or as a flowchart using graphical symbols. The key phases of an algorithm are problem solving to design the steps, then implementation in a programming language. Properties of good algorithms include being correct, efficient, and working for all possible inputs to the problem.