Inversion of array Java
- Get link
- X
- Other Apps
PROGRAM TO COUNT INVERSIONS IN AN ARRAY
import
java.util.Arrays;
public
class
MAIN {
// Function to count the number of inversions
// during the merge process
private
static
int
mergeAndCount(
int
[] arr,
int
l,
int
m,
int
r)
{
// Left subarray
int
[] left = Arrays.copyOfRange(arr, l, m +
1
);
// Right subarray
int
[] right = Arrays.copyOfRange(arr, m +
1
, r +
1
);
int
i =
0
, j =
0
, k = l, swaps =
0
;
while
(i < left.length && j < right.length)
{
if
(left[i] <= right[j])
arr[k++] = left[i++];
else
{
arr[k++] = right[j++];
swaps += (m +
1
) - (l + i);
}
}
return
swaps;
}
// Merge sort function
private
static
int
mergeSortAndCount(
int
[] arr,
int
l,
int
r)
{
// Keeps track of the inversion count at a
// particular node of the recursion tree
int
count =
0
;
if
(l < r) {
int
m = (l + r) /
2
;
// Total inversion count = left subarray count
// + right subarray count + merge count
// Left subarray count
count += mergeSortAndCount(arr, l, m);
// Right subarray count
count += mergeSortAndCount(arr, m +
1
, r);
// Merge count
count += mergeAndCount(arr, l, m, r);
}
return
count;
}
// Driver code
public
static
void
main(String[] args)
{
int
[] arr = {
1
,
20
,
6
,
4
,
5
};
System.out.println(mergeSortAndCount(arr,
0
,
arr.length -
1
));
}
}
OUTPUT
Number of inversions are 5
- Get link
- X
- Other Apps
Comments
Post a Comment