Introduction
Pupils should be taught to:
 understand several key algorithms that reflect computational thinking [for example, ones for sorting and searching]; use logical reasoning to compare the utility of alternative algorithms for the same problem .
A sorting algorithm is an algorithm that puts elements of a list in a certain order. The mostused orders are numerical order and lexicographical order. Efficient sorting is important for optimizing the use of other algorithms (such as search and merge algorithms) which require input data to be in sorted lists. The output must satisfy two conditions:
 The output is in nondecreasing order (each element is no smaller than the previous element according to the desired total order);
 The output is a permutation (reordering) of the input.
Sorting algorithms are prevalent in introductory computer science classes, where the abundance of algorithms for the problem provides a gentle introduction to a variety of core algorithm concepts, such as big O notation, divide and conquer algorithms, data structures, randomized algorithms, best, worst and average case analysis, timespace tradeoffs, and upper and lower bounds. (Wikipedia).
Resources for self study
 Resources for lectures or group study
 Resources for use with pupils
