algorithm sorting comparison non-comparison stable unstable in-place out-of-place adaptive non-adaptive deterministic randomized parallel sequential internal external online offline divide-and-conquer insertion selection exchange merge heap radix counting bucket tree distribution recursive iterative linearithmic quadratic linear