最坏情况下,合并两个大小为n的已排序数组所需要的比较次数
有的人说是2n-1次,但是
从下面实现的代码看,比较的次数是n次。
#include <iostream>
#include <iomanip>
using namespace std;
int combine_2set()//合并两个数组,去掉一样的元素
{
int X[5]={1,3,4,5,7};
int Y[5]={2,4,6,8,9};
int i = 0, j = 0, k = 0;
int Z[10];
#include <iomanip>
using namespace std;
int combine_2set()//合并两个数组,去掉一样的元素
{
int X[5]={1,3,4,5,7};
int Y[5]={2,4,6,8,9};
int i = 0, j = 0, k = 0;
int Z[10];
while(i < 5 && j < 5)
{
if(X[i] > Y[j])
Z[k++] = Y[j++];
else if(X[i] < Y[j])
Z[k++] = X[i++];
else if(X[i] = Y[j])
{
Z[k++] = X[i++];
++j;
}
}
if(i == 5)
{
for(; j < 5; ++j)
Z[k++] = Y[j];
}
else
{
for(; i < 5; ++i)
Z[k++] = X[i];
}
for(int m=0;m<k;m++)
cout<<Z[m]<<setw(2);
cout<<endl;
{
if(X[i] > Y[j])
Z[k++] = Y[j++];
else if(X[i] < Y[j])
Z[k++] = X[i++];
else if(X[i] = Y[j])
{
Z[k++] = X[i++];
++j;
}
}
if(i == 5)
{
for(; j < 5; ++j)
Z[k++] = Y[j];
}
else
{
for(; i < 5; ++i)
Z[k++] = X[i];
}
for(int m=0;m<k;m++)
cout<<Z[m]<<setw(2);
cout<<endl;
return 0;
}
}