A heap-labeled tree = a binary tree such that the key of each node "dominates" the keys of its children. You can store a binary tree in an array w/o pointers - space efficient, but missing nodes take up unused space.

Partition elements into two groups, sort each smaller problem recursively, then interleave two sorted lists to order the merged elements.

Ex: sorting phone book by 1st letter of last name ==> 26 buckets. Repeat with 2nd letter of last name (smaller piles), etc. Done when each bucket contains a single name.

Effective when distribution is roughly uniform, terrible when not.

Fast algorithm for searching a sorted array of keys.