1
+ #include " bits/stdc++.h"
2
+ using namespace std ;
3
+ void printArr (int arr[], int n,string s=" \n " ){
4
+ if (s==" " ){
5
+ for (int i=0 ;i<n;i++){
6
+ cout<<arr[i]<<" " ;
7
+ }
8
+ cout<<endl;
9
+ }
10
+ else {
11
+ for (int i=0 ;i<n;i++){
12
+ cout<<arr[i]<<' \n ' ;
13
+ }
14
+ }
15
+ }
16
+ int merge (int left[], int right[], int arr[], int leftLength, int rightLength){
17
+ int i=0 ,j=0 ,k = 0 ;
18
+ int inversions = 0 ;
19
+ while (i< leftLength && j<rightLength){
20
+ if (left[i]<=right[j]){
21
+ arr[k]= left[i];
22
+ i++;
23
+ k++;
24
+ }
25
+ else {
26
+ arr[k] = right[j];
27
+ j++;
28
+ k++;
29
+ inversions += leftLength - i;
30
+ }
31
+ }
32
+ while (i<leftLength){
33
+ arr[k] = left[i];
34
+ i++;
35
+ k++;
36
+ // inversions += rightLength;
37
+
38
+ }
39
+ while (j<rightLength){
40
+ arr[k] = right[j];
41
+ j++;
42
+ k++;
43
+ }
44
+ return inversions;
45
+ }
46
+ int mergeSort (int arr[], int n){
47
+ int mid = n/2 ;
48
+ if (n<2 ){
49
+ return 0 ;
50
+ }
51
+ int left[mid];
52
+ int right[n-mid];
53
+
54
+ for (int i = 0 ; i<mid;i++){
55
+ left[i] = arr[i];
56
+ }
57
+ // printArr(left, mid," ");
58
+ int i = 0 ;
59
+ for (int j = mid;j<n;j++){
60
+ right[i] = arr[j];
61
+ i++;
62
+ }
63
+ // printArr(right, n-mid," ");
64
+ int x = mergeSort (left, mid);
65
+ int y = mergeSort (right, n- mid);
66
+ int z = merge (left, right, arr,mid, n- mid);
67
+
68
+ return x+y+z;
69
+
70
+ }
71
+ int inversions (int arr[], int n){
72
+ int d = 0 ;
73
+ for (int i = 0 ;i< n;i++){
74
+ for (int j = i+1 ;j<n;j++){
75
+ if (arr[i]>arr[j]){
76
+ d++;
77
+ }
78
+ }
79
+ }
80
+
81
+ return d;}
82
+ int main (){
83
+ int arr[8 ] = {2 ,1 ,4 ,6 ,7 ,5 ,3 ,8 };
84
+ cout<< " Inversions are:" << inversions (arr,8 )<<endl;
85
+ cout<< " Inversions output:" << mergeSort (arr,8 )<<endl;
86
+ return 0 ;
87
+ }
0 commit comments