0

Merge sort error

I was trying to create a merge sort function in python 3 IDLE and I can't find the problem with my code that provokes the interpreter to show the error. I need Help to understand what is the problem with my code. Code: def mergesort(a,b,c): A=0 B=0 for i in range(len(a)+len(b)): if (A==len(a)): c+=b[B:] break elif (B==len(b)): c+=a[A:] break elif (a[A]<=b[B]): c[i]=a[A] A=A+1 else: c[i]=a[B] B=B+1 print (c) mergesort(list(range(10)),list(range(30,40)),[]) Error Message: Traceback (most recent call last): File "G:\STUDY FILES\EXTERNAL\COURSES\NPTEL COURSE\PYTHON STARTER\files\mergesort.py", line 18, in <module> mergesort(list(range(10)),list(range(30,40)),[]) File "G:\STUDY FILES\EXTERNAL\COURSES\NPTEL COURSE\PYTHON STARTER\files\mergesort.py", line 12, in mergesort c[i]=a[A] IndexError: list assignment index out of range

17th May 2018, 6:04 AM
VISHNU P.S
VISHNU P.S - avatar
2 Answers
0
I figured out the answer myself with both for loop and while loop💙.. thanq for helping me out💹 .. def mergesort(a,b,c): A=0 B=0 for i in range(len(a)+len(b)): if (A==len(a)): c=c+b[B:] break elif (B==len(b)): c=c+a[A:] break elif (a[A]<=b[B]): c=c+[a[A]] A=A+1 else: c=c+[b[B]] B=B+1 print (c) def merge(a,b,c): A=0 B=0 while (A<len(a) and B<len(b)): if (a[A]>=b[B]): c=c+[b[B]] B+=1 else: c=c+[a[A]] A+=1 if A==len(a): c=c+b[B:] else: c=c+a[A:] print (c) mergesort(list(range(10)),list(range(5,20,2)),[]) merge(list(range(4)),list(range(5,20,2)),[])
17th May 2018, 8:37 AM
VISHNU P.S
VISHNU P.S - avatar
0
# Python program for implementation of MergeSort # Merges two subarrays of arr[]. # First subarray is arr[l..m] # Second subarray is arr[m+1..r] def merge(arr, l, m, r): n1 = m - l + 1 n2 = r- m # create temp arrays L = [0] * (n1) R = [0] * (n2) # Copy data to temp arrays L[] and R[] for i in range(0 , n1): L[i] = arr[l + i] for j in range(0 , n2): R[j] = arr[m + 1 + j] # Merge the temp arrays back into arr[l..r] i = 0 # Initial index of first subarray j = 0 # Initial index of second subarray k = l # Initial index of merged subarray while i < n1 and j < n2 : if L[i] <= R[j]: arr[k] = L[i] i += 1 else: arr[k] = R[j] j += 1 k += 1 # Copy the remaining elements of L[], if there # are any while i < n1: arr[k] = L[i] i += 1 k += 1 # Copy the remaining elements of R[], if there # are any while j < n2: arr[k] = R[j] j += 1 k += 1 # l is for left index and r is right index of the # sub-array of arr to be sorted def mergeSort(arr,l,r): if l < r: # Same as (l+r)/2, but avoids overflow for # large l and h m = (l+(r-1))/2 # Sort first and second halves mergeSort(arr, l, m) mergeSort(arr, m+1, r) merge(arr, l, m, r) # Driver code to test above arr = [12, 11, 13, 5, 6, 7] n = len(arr) print ("Given array is") for i in range(n): print ("%d" %arr[i]), mergeSort(arr,0,n-1) print ("\n\nSorted array is") for i in range(n): print ("%d" %arr[i]),
17th May 2018, 6:08 AM
Rajeeb