Advertisement
Guest User

Untitled

a guest
Aug 19th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.49 KB | None | 0 0
  1. def countInversions(arr):
  2.     return mergeSort(arr)
  3.  
  4. def mergeSort(arr):
  5.     inversions = 0
  6.     lenArr = len(arr)
  7.    
  8.     if lenArr > 1:
  9.         #split array in two
  10.         middle = lenArr // 2
  11.         leftArr = arr[middle:]
  12.         rightArr = arr[:middle]
  13.  
  14.         #sort halves
  15.         inversions = mergeSort(leftArr) + mergeSort(rightArr)
  16.  
  17.         #init indexes
  18.         leftIndex = 0
  19.         rightIndex = 0
  20.         currentIndex = 0
  21.  
  22.         #save len() calls
  23.         lenLeftArr = len(leftArr)
  24.         lenRightArr = len(rightArr)
  25.  
  26.         #compare subarrays
  27.         while leftIndex < lenLeftArr and rightIndex < lenRightArr:
  28.             if leftArr[leftIndex] < rightArr[rightIndex]:
  29.                 arr[currentIndex] = leftArr[leftIndex]
  30.                 leftIndex = leftIndex + 1
  31.             else:
  32.                 arr[currentIndex] = rightArr[rightIndex]
  33.                 rightIndex = rightIndex + 1
  34.                 inversions = inversions + (lenLeftArr-leftIndex)
  35.             currentIndex = currentIndex + 1
  36.  
  37.         #copy remaining elements from leftArr
  38.         while leftIndex < lenLeftArr:
  39.             arr[currentIndex] = leftArr[leftIndex]
  40.             leftIndex = leftIndex + 1
  41.             currentIndex = currentIndex + 1
  42.  
  43.         #copy remaining elements from rightArr
  44.         while rightIndex < lenRightArr:
  45.             arr[currentIndex] = rightArr[rightIndex]
  46.             rightIndex = rightIndex + 1
  47.             currentIndex = currentIndex + 1
  48.  
  49.     return inversions
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement