使用合并排序计算反转次数

没药

我写了以下代码,使用除法和征服方法计算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;

      }
来自莫斯科的弗拉德

我没有仔细检查您的所有代码,但足以指出该功能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没有任何意义,因为leftright没有数组。他们是指针int *

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章