error: invalid type argument of unary ‘*’ (have ‘int’): in counting number of inversions in an array using mergesort
error: invalid type argument of unary ‘*’ (have ‘int’): in counting number of inversions in an array using mergesort
我正在尝试编写此代码以使用合并排序技术计算数组中的反转次数。我参考了GeeksForGeeks。即使我没有明确地使用指针,我也会收到此错误。
error: invalid type argument of unary ‘*’ (have ‘int’)
下面是我的代码。
#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;
}
有人可以帮帮我吗?
问题很可能是您使用 #include <bits/stdc++.h>
和调用 merge
。
问题是在<algorithm>
header中定义了一个std::merge函数,<bits/stdc++.h>
header包含<algorithm>
.此外,您还有
using namespace std;
使问题进一步复杂化。您实际上是在尝试调用 std::merge
而不是您自己的 merge
函数,所有这些都是由于 std
名称空间被引入您的程序。 std::merge
函数需要的参数类型与您传递给自己的 merge
函数的参数类型不同,因此会出现错误。
解决方案 -- 停止使用 #include <bits/stdc++.h>
。包括正确的标准 C++ header 而不是这个。正确的 header 应该是:
#include <cstdio>
然后你会(或应该)遇到另一个错误,即正在调用 merge
,但编译器不知道它。在这种情况下,您可以声明 merge
函数并将其放在 mergeSort
函数
之前
// declare the merge() function here
int merge(int arr[], int temp[], int l, int m, int r);
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;
}
// implement merge() here
int merge(int arr[], int temp[], int l, int m, int r)
{
//...
}
或将整个 merge
函数实现移动到 mergeSort
函数之前。
我正在尝试编写此代码以使用合并排序技术计算数组中的反转次数。我参考了GeeksForGeeks。即使我没有明确地使用指针,我也会收到此错误。
error: invalid type argument of unary ‘*’ (have ‘int’)
下面是我的代码。
#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;
}
有人可以帮帮我吗?
问题很可能是您使用 #include <bits/stdc++.h>
和调用 merge
。
问题是在<algorithm>
header中定义了一个std::merge函数,<bits/stdc++.h>
header包含<algorithm>
.此外,您还有
using namespace std;
使问题进一步复杂化。您实际上是在尝试调用 std::merge
而不是您自己的 merge
函数,所有这些都是由于 std
名称空间被引入您的程序。 std::merge
函数需要的参数类型与您传递给自己的 merge
函数的参数类型不同,因此会出现错误。
解决方案 -- 停止使用 #include <bits/stdc++.h>
。包括正确的标准 C++ header 而不是这个。正确的 header 应该是:
#include <cstdio>
然后你会(或应该)遇到另一个错误,即正在调用 merge
,但编译器不知道它。在这种情况下,您可以声明 merge
函数并将其放在 mergeSort
函数
// declare the merge() function here
int merge(int arr[], int temp[], int l, int m, int r);
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;
}
// implement merge() here
int merge(int arr[], int temp[], int l, int m, int r)
{
//...
}
或将整个 merge
函数实现移动到 mergeSort
函数之前。