from collections import deque from typing import List, Deque def merge( els1: List[int], els2: List[int], ) -> List[int]: """ Merges two sorted lists into one, keeps order. >>> merge([1, 2, 3], [3, 4, 5]) [1, 2, 3, 3, 4, 5] """ result = [] i, j = 0, 0 while i < len(els1) and j < len(els2): if els1[i] < els2[j]: result.append(els1[i]) i += 1 else: result.append(els2[j]) j += 1 result.extend(els1[i:]) result.extend(els2[j:]) return result def mergesort(elements: List[int]) -> List[int]: """ Sorts a given list. """ # -> if len(elements) == 0: # if not elements: if len(elements) <= 1: return elements buffer: Deque[List[int]] = deque() for el in elements: buffer.append([el]) while len(buffer) > 1: h1: List[int] = buffer.popleft() h2: List[int] = buffer.popleft() buffer.append(merge(h1, h2)) return buffer.pop()