上次的merge是通过在子序列末尾加上一个无穷大的数字最为标志实现的。再写此函数时,舍弃了原来的做法,直接比较长度,看那个子序列已经处理完了。
#include <iostream>
using namespace std;
int l[] = {17,25,28,39,72};
int llength = 5;
int r[] = {4,15,23,55,89};
int rlength = 5;
int re[10];
void merge(int * l,int * r,int llength,int rlength)
{
int i =0;int j = 0;
for(int k = 0;k < llength+rlength-2;k++)
{
if(i <= llength && j <= rlength)
{
if(l[i] < r[j])
{
re[k] = l[i];
i++;
}
else
{
re[k] = r[j];
j++;
}
}
else
{
if(i > llength)
{
re[k] = r[j];
j++;
}
else
{
re[k] = l[i];
i++;
}
}
}
}
int main()
{
merge(l,r,llength,rlength);
for(int i = 0;i < llength+rlength-2;i++)
cout<<re[i]<<" ";
cout<<endl;
return 0;
}