def mergeSort(nums):
    if len(nums) <= 1:
        return nums

    mid = len(nums)//2
    first = mergeSort(nums[:mid])
    second = mergeSort(nums[mid:])
    merge = []

    while first and second:
        merge.append(first.pop(0) if first[0] <= second[0] else second.pop(0))
    merge.extend(first if first else second)
 
    return merge