What are some mergesort properties?
Based on a recursive divide-and-conquer approach:
Worst-case running time of Θ(n log n)
One of the best external (disk) sorting algorithms.
Works well for linked lists in addition to arrays/vectors
Mergesort analysis
The number of comparisons used by mergesort on an input of size n satisfies a recurrence of the form:
T(n) = T([n/2]) + T([n/2]) + n
By induction, we see that T(n) is Θ(n lg n) for n a power of 2.
Base case: n = 0 or n = 1
Inductive hypothesis: T(n) = n lg n
Then (next inductive case):
T(2n) = 2T(n) + 2n (from recurrence)
= 2n lg n + 2n (substitute hypothesis)
= 2n(lg(2n) − 1) + 2n (note lg 2 = 1)
= 2n lg(2n) (simplify)
Master Theorem for Divide-Conquer Recurrences

What are some quicksort properties?
Quicksort is based on a recursive partitioning about a ‘pivot’:
In practice, a very fast internal sorting algorithm (almost twice as fast as mergesort)
On average good O(n lg n), but worst case input data leads to Ω( n2 ) performance
What are 3 different ways to choose a quicksort pivot?
Quicksort recurrence relations and runtime
Best case is when partitioning gives partitions of the same size so cost is either
T(n) = 2T((n − 1)/2) + n for unique elements
or
T(n) = 2T(n/3) + n when duplicates allowed
Both recurrences are O(n lg n)
Worst case is when partitioning gives unbalanced partitions where cost is then
T(n) = T(n − 1) + n
which is O( n2 )
What is beadsort and what is its runtime complexity range?
Sorting algorithm which sorts positive integers by representing them in unary as a sequence of beads on a horizontal lines then uses gravity to sort them with the assistance of vertical rods
The algorithm’s run-time complexity ranges from O(1) to O(S), where S is the sum of the input integers
