Merge Sort (Accepted)

class Solution:
    def sortArray(self, nums: List[int]) -> List[int]:
        return self.merge_sort(nums)

    def merge_sort(self, nums: List[int]) -> List[int]:
        L = len(nums)
        if L <= 1:
            return nums
        m = L //2
        left_list = self.merge_sort(nums[:m])
        right_list = self.merge_sort(nums[m:])
        return self.merge(left_list, right_list)

    def merge(self, left_list: List[int], right_list: List[int]) -> List[int]:
        left_cursor = 0
        right_cursor = 0
        res = []
        while left_cursor < len(left_list) and right_cursor < len(right_list):
            if left_list[left_cursor] < right_list[right_cursor]:
                res.append(left_list[left_cursor])
                left_cursor += 1
            else:
                res.append(right_list[right_cursor])
                right_cursor += 1

        res.extend(left_list[left_cursor:])
        res.extend(right_list[right_cursor:])
        return res

Last updated