Repeatedly extracts sorted subsequences ('strands') from the remaining elements and merges each strand into the accumulated result until the input is exhausted. Each extraction pass greedily builds the longest non-decreasing run starting from the first remaining element, scanning left to right; elements that fit are appended to the strand, others are compacted back into the remaining pool in place.
On already-sorted input the entire array forms one strand and the algorithm runs in O(n). On reverse-sorted input every strand has length 1, producing n strands and O(n²) total work. Random input typically yields O(√n) strands, giving O(n√n) average cost.