两个数组之间的共同功能?

时间:2014-03-13 18:16:29

标签: c++ arrays function

我想在两个数组之间找到共同的元素。我的功能无法正常工作。 数组已排序。 只想将两个排序的数组放入check_common函数中以显示常用元素。 任何人都可以帮忙解决它!

void check_common (int x[], int size1, int y[], int size2)
    {
        int temp;
cout << " Common elements are:\t" << endl;
for ( int i=0; i <= size2; i++ )
{
    for ( int j=0; j <= size1; j++)
    {
        if (x[j] == y[j]){
            temp = x[j];
            cout << temp << "\t";}
    }   
}
cout << endl;
    }

2 个答案:

答案 0 :(得分:1)

如果在任一数组中,项目不是唯一的,那么您的解决方案将失败,因为所有其他元素都会被移位。

天真的解决方案是使用O(n)检查。检查array1中的每个元素(如果它也存在于array2中)。由于列表已排序,因此执行此检查位于O(log(n))。 因此整个运行时将是O(nlog(n)),这是相当好的。 如果您可以保证每个列表项都是唯一的,则可以在O(log(n))

中完成

答案 1 :(得分:0)

它看起来像是一个“家庭作业”,所以这里有建议。

  1. 您需要传递两个数组的大小。现在,您的循环是一个永无止境的循环,系统将为您报告错误,否则您的程序将挂起。
  2. 由于您对两个数组进行了排序,因此您可以使用两个索引 - 一个用于x,另一个用于y数组。将两个指针向前移动,无论哪个指向“较小”值。当两者都达到阵列限制时停止。每次指针指向相同的值时,都会将其打印出来。
  3. 这样的假设nx的大小为x且大小为ny y

    ix=0 ;
    iy=0 ;
    while ( ix < nx && iy < ny )
    {
        if ( x[ix] == y[iy] )
        {
            std::cout << x[ix] << "\t" ;
            ix++ ;
            iy++ ;
        }
        else if ( x[ix] < y[iy] )
            ix++ ;
        else
            iy++ ;
    }
    

    我将离开你,改进这个功能,并改变check_common函数参数。