C++ 两个数组之间的公共函数?

C++ 两个数组之间的公共函数?,c++,arrays,function,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;

我想找到两个数组之间的公共元素。我的功能不能正常工作。 数组被排序。 只想将两个排序的数组放入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;
    }
void check\u common(整数x[],整数大小1,整数y[],整数大小2)
{
内部温度;

cout如果两个数组中的项都不是唯一的,则解决方案将失败,因为所有其他元素都会移位

最简单的解决方案是使用
O(n)
检查。检查数组1中的每个元素(如果它也存在于数组2中)。因为列表是排序的,所以在
O(log(n))
中进行此检查。 因此,整个运行时将是
O(nlog(n))
,这是相当不错的。
如果您可以保证每个列表项都是唯一的,那么可以在
O(log(n))

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

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

    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++ ;
    }
    
    ix=0;
    iy=0;
    而(ixstd::难道我不确定你在问什么。
    for(inti=0;I)