Factors: algorithmic complexity, startup costs, additional space requirements, use of recursion (function calls are expensive
and eat stack space), worst-case behavior, assumptions about input data, caching, and behavior on already-sorted or nearlysorted
data