I am trying to write this code to count the number of inversions in an array using merge sort technique. I took reference from GeeksForGeeks. Even though I am not explicitly playing with pointers I am getting this error.
error: invalid type argument of unary ‘*’ (have ‘int’)
Below is my code.
#include <bits/stdc++.h>
using namespace std;
int mergeSort(int arr[], int temp[], int l, int r){
int invcount = 0;
if(l<r){
int m = (l+r)/2;
invcount += mergeSort(arr, temp, l, m);
invcount += mergeSort(arr, temp, m+1, r);
invcount += merge(arr, temp, l, m, r);
}
return invcount;
}
int merge(int arr[], int temp[], int l, int m, int r){
int invcount = 0;
int k = l;
int i = l, j = m+1;
while(true){
if(i>m){
while(j<=r){
temp[k] = arr[j];
k++;
j++;
}
break;
}
else if(j>r){
while(i<=m){
temp[k] = arr[i];
k++;
i++;
}
break;
}
if(arr[i] > arr[j]){
temp[k] = arr[j];
k++;
j++;
invcount += m-i+1;
}
else{
temp[k] = arr[i];
k++;
i++;
}
}
for(i=l; i<=r; i++){
arr[i] = temp[i];
}
return invcount;
}
int main(int argv, char** args)
{
// int arr[] = {1, 20, 6, 4, 5};
int arr[] = {2, 4, 1, 3, 5};
int n = sizeof(arr)/sizeof(arr[0]);
int *temp = new int[n];
printf(" Number of inversions are %d \n", mergeSort(arr, temp, 0, n-1));
// getchar();
return 0;
}
Can someone please help me out?