Inversion of array Python
- Get link
- X
- Other Apps
PROGRAM TO COUNT INVERSIONS IN AN ARRAY
# Function to Use Inversion Count
def
mergeSort(arr, n):
# A temp_arr is created to store
# sorted array in merge function
temp_arr
=
[
0
]
*
n
return
_mergeSort(arr, temp_arr,
0
, n
-
1
)
# This Function will use MergeSort to count inversions
def
_mergeSort(arr, temp_arr, left, right):
# A variable inv_count is used to store
# inversion counts in each recursive call
inv_count
=
0
# We will make a recursive call if and only if
# we have more than one elements
if
left < right:
# mid is calculated to divide the array into two subarrays
# Floor division is must in case of python
mid
=
(left
+
right)
/
/
2
# It will calculate inversion
# counts in the left subarray
inv_count
+
=
_mergeSort(arr, temp_arr,
left, mid)
# It will calculate inversion
# counts in right subarray
inv_count
+
=
_mergeSort(arr, temp_arr,
mid
+
1
, right)
# It will merge two subarrays in
# a sorted subarray
inv_count
+
=
merge(arr, temp_arr, left, mid, right)
return
inv_count
# This function will merge two subarrays
# in a single sorted subarray
def
merge(arr, temp_arr, left, mid, right):
i
=
left
# Starting index of left subarray
j
=
mid
+
1
# Starting index of right subarray
k
=
left
# Starting index of to be sorted subarray
inv_count
=
0
# Conditions are checked to make sure that
# i and j don't exceed their
# subarray limits.
while
i <
=
mid
and
j <
=
right:
# There will be no inversion if arr[i] <= arr[j]
if
arr[i] <
=
arr[j]:
temp_arr[k]
=
arr[i]
k
+
=
1
i
+
=
1
else
:
# Inversion will occur.
temp_arr[k]
=
arr[j]
inv_count
+
=
(mid
-
i
+
1
)
k
+
=
1
j
+
=
1
# Copy the remaining elements of left
# subarray into temporary array
while
i <
=
mid:
temp_arr[k]
=
arr[i]
k
+
=
1
i
+
=
1
# Copy the remaining elements of right
# subarray into temporary array
while
j <
=
right:
temp_arr[k]
=
arr[j]
k
+
=
1
j
+
=
1
# Copy the sorted subarray into Original array
for
loop_var
in
range
(left, right
+
1
):
arr[loop_var]
=
temp_arr[loop_var]
return
inv_count
# Driver Code
# Given array is
arr
=
[
1
,
20
,
6
,
4
,
5
]
n
=
len
(arr)
result
=
mergeSort(arr, n)
print
(
"Number of inversions are"
, result)
OUTPUT
Number of inversions are 5
- Get link
- X
- Other Apps
Comments
Post a Comment