已知A,B两已排序数组,A的缓存足够大,将A与B合并到A中形成一个有序数组。
跟着师兄的代码写的 博客-->http://dwz.cn/as2lK
void insertOnce(int *a,int pos,int len,int val)
{
<span style="white-space:pre"> </span>for(int i=len-1;i>=pos;i--)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>a[i+1]=a[i];
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>a[pos]=val;
}
int * insertMerge(int *a,int *b,int lenA,int lenB)
{
<span style="white-space:pre"> </span>int *p=a;//int *c=a;
<span style="white-space:pre"> </span>int j=0;//指向a的下标
<span style="white-space:pre"> </span>int len=lenA;//zhixiangb
<span style="white-space:pre"> </span>int count=0;//
<span style="white-space:pre"> </span>for(int i=0;i<lenB;i++)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>if(a[j]>=b[i])
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>insertOnce(a,j,lenA,b[i]);
<span style="white-space:pre"> </span>j++;
<span style="white-space:pre"> </span>lenA++;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>else
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>while((a[j]<b[i])&&(count<len))//判断是否遍历完a[]
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>j++;
<span style="white-space:pre"> </span>count++;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>if(count>=len)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>a[j++]=b[i];
<span style="white-space:pre"> </span>lenA++;
<span style="white-space:pre"> </span>continue;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>insertOnce(a,j,lenA,b[i]);
<span style="white-space:pre"> </span>j++;lenA++;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>cout<<lenA<<endl;
<span style="white-space:pre"> </span>return p;
}
void main()
{
<span style="white-space:pre"> </span>int array0[7]={1,3,5,6};//注意长度
<span style="white-space:pre"> </span>int array1[]={2,3,9};
<span style="white-space:pre"> </span>insertMerge(array0,array1,4,3);
<span style="white-space:pre"> </span>for(int i=0;i<7;i++)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>cout<<array0[i]<<" ";
<span style="white-space:pre"> </span>}
}