Treats every individual element as a sorted run of length 1, then iteratively merges adjacent runs and doubles the merge width each pass: 1 → 2 → 4 → 8 → … until a single sorted run spans the whole array.
Delivers identical O(n log n) stability and worst-case guarantee to top-down Merge sort while being fully iterative, no recursion, no call-stack overhead, and no need to compute split points.