0

I was writing a sorting program in leetcode and came across this error

class Solution(object):
    def mergesort(arr):
        if len(arr)>1:
            r=len(arr)//2
            arr1,arr2=arr[:r],arr[r:]
            mergesort(arr1)
            mergesort(arr2)
            i=j=k=0
            while i<len(arr1) and j<len(arr2):
                if arr1[i]>arr2[j]:
                    arr[k]=arr2[j]
                    j+=1
                else:
                    arr[k]=arr1[i]
                    i+=1
                k+=1
            while i<len(arr1):
                arr[k]=arr1[i]
                k+=1
                i+=1
            while j<len(arr2):
                arr[k]=arr2[j]
                k+=1
                j+=1
    def sortColors(self, nums):
        mergesort(nums)

Even though the function mergesort is clearly defined above the function sortColors, it gives an error saying global name mergesort is not defined. If I use that function in vscode it works as expected. What am I doing wrong?

mkrieger1
  • 19,194
  • 5
  • 54
  • 65

1 Answers1

0

def mergesort is not defined inside def sortColors

You can either use self

class Solution(object):
    def mergesort(self, arr):
        if len(arr)>1:
            r=len(arr)//2
            arr1,arr2=arr[:r],arr[r:]
            self.mergesort(arr1)
            self.mergesort(arr2)
            i=j=k=0
            while i<len(arr1) and j<len(arr2):
                if arr1[i]>arr2[j]:
                    arr[k]=arr2[j]
                    j+=1
                else:
                    arr[k]=arr1[i]
                    i+=1
                k+=1
            while i<len(arr1):
                arr[k]=arr1[i]
                k+=1
                i+=1
            while j<len(arr2):
                arr[k]=arr2[j]
                k+=1
                j+=1
    def sortColors(self, nums):
        self.mergesort(nums)

or move def mergesort inside def sortColors

class Solution(object):
    def sortColors(self, nums):
        def mergesort(arr):
            if len(arr)>1:
                r=len(arr)//2
                arr1,arr2=arr[:r],arr[r:]
                mergesort(arr1)
                mergesort(arr2)
                i=j=k=0
                while i<len(arr1) and j<len(arr2):
                    if arr1[i]>arr2[j]:
                        arr[k]=arr2[j]
                        j+=1
                    else:
                        arr[k]=arr1[i]
                        i+=1
                    k+=1
                while i<len(arr1):
                    arr[k]=arr1[i]
                    k+=1
                    i+=1
                while j<len(arr2):
                    arr[k]=arr2[j]
                    k+=1
                    j+=1
        mergesort(nums)

On the latter case def mergesort is not accessible through class Solution:

Traceback (most recent call last):
  File "main.py", line 29, in <module>
    Solution.mergesort()
AttributeError: type object 'Solution' has no attribute 'mergesort'
Afkaaja
  • 47
  • 5