我编写了以下代码来计算使用分而治之的c ++中的反转次数,但它不起作用有人能告诉我这里出了什么问题吗?有人可以解释我的代码有什么问题,而不是发布任何其他相关问题的链接,因为我已经通过它们并且无法弄清楚我的错误
#include <iostream>
#include <string>
using namespace std;
int merge_count_inverse(int left[],int right[]) /*counting number of inversion using merge sort*/
{
int i=0;
int c=0;
int r=0;
int j=0;
int len_arr=0;
int len_left=(sizeof(left)/sizeof(*left));
int len_right=(sizeof(right)/sizeof(*right));
len_arr=(len_left+len_right);
int arr[len_arr];
while((i<len_left)||(j<len_right))
{
if (left[i]<right[j])
{
arr[r]=left[i];
r++;
i++;
}
if (left[i]>right[j])
{
arr[r]=right[j];
r++;
j++;
c=c+len_left-i;
}
}
return (c);
}
int sort_count(int arr[])
{
int cou=0;
int l=0;
int r=0;
int m=0;
int len_arr=(sizeof(arr)/sizeof(*arr));
int middle=0;
middle=len_arr/2;
int left[middle];
int right[middle];
if (len_arr <2)
{
return(0);
}
else
{
for (int i=0;i<=(middle-1);i++)
{
left[i]=arr[i];
right[i]=arr[middle+i];
}
l=l+sort_count(left);
r=r+sort_count(right);
m=m+merge_count_inverse(left,right);
cou=cou+l+r+m;
return(cou);
}
}
int main()
{
int arr[8]={2,5,1,3,8,7,6,9};
int len_arr=(sizeof(arr)/sizeof(*arr));
int co=0;
co+=sort_count(arr);
cout<<co;
}
答案 0 :(得分:0)
我没有查看您的所有代码,但它足以指出函数sort_count
无效。其参数调整为int *
因此len_arr
的计算无意义
int sort_count(int arr[])
{
// ...
int len_arr=(sizeof(arr)/sizeof(*arr));
事实上,所显示的陈述相当于
int len_arr=(sizeof( int * )/sizeof( int ));
您应该将函数定义为模板函数,该函数具有对数组的引用类型的参数或具有两个参数的非模板函数。第二个参数将指定数组的大小。
同样适用于函数merge_count_inverse
int merge_count_inverse(int left[],int right[]) /*counting number of inversion using merge sort*/
{
// ...
int len_left=(sizeof(left)/sizeof(*left));
int len_right=(sizeof(right)/sizeof(*right));
len_left
和len_right
的计算毫无意义,因为left
和right
不是数组。它们是指针int *