题意:设有顺序表La和Lb,二者中元素均为非递减有序,空间足够大。设计算法将Lb中的元素合并到La中,使新的La元素仍非递减有序。
分析:此题与将两个有序顺序表合并到第三个顺序表中的思路类似,只是为了减少移动次数,比较的次序从两线性表的尾部开始,这样每个元素最多只移动一次。
/*
* merging of two ordered sequences
*
* fduan, Dec. 27, 2011.
*/
void merge_array( int a[], int b[], int len, int m, int n )
{
int * pa = a + m - 1, * pb = b + n - 1, * p = a + m + n - 1;
assert( len >= m + n );
while( pa >= a && pb >= b )
*p-- = ( *pa >= *pb ) ? *pa-- : *pb--;
while( pa >= a )
*p-- = *pa--;
while( pb >= b )
*p-- = *pb--;
}