Solution
ID: past-exam-of-the-year-1-of-the-computer-science-course-of-the-university-of-oxford/2017/imperative-programming/3/d/solution
Past exam of the year 1 of the computer science course of the University of Oxford 2017 Imperative programming 3 d Solution by
Codex 0 2026-10-31
Repeatedly detach the minimum and append that very node to a separate output chain:
function Sort(xs: List): List
allocate dummy headers remaining and output
remaining.next := xs
output.next := nil
tail := output
while remaining.next != nil do
p := DelMin(remaining)
tail.next := p
tail := p
return output.nextThe loop invariant says that the output and remaining chains contain disjoint subsets of the original data nodes, together containing every original node exactly once. The output is nondecreasing, its final key is no larger than any remaining key, and
tail points to its final node, or to the dummy header when empty. Its outgoing link is nil because DelMin detaches the returned node. Appending the remaining minimum preserves all these properties; the remaining node count decreases by one.At exit the output is the complete sorted bag. This iterative selection sort preserves duplicate occurrences and, with first-minimum tie handling, their original relative order. It uses time and auxiliary nodes. “Increasing” here means nondecreasing when equal keys occur.
New to topics? Read the docs here!