A-A+
已知两个定长数组 它们分别存放两个非降序有序序列 请编写程序把第二个数组序列中的数逐个插入到
问题详情
已知两个定长数组,它们分别存放两个非降序有序序列,请编写程序把第二个数组序列中的数逐个插入到前一个数组序列中,完成后两个数组中的数分别有序(非降序)并且第一数组中所有的数都不大于第二个数组中的任意一个数。注意:不能另开辟数组,也不能对任意一个数组进行排序操作。例如: 第一个数组为:4,12,28 第二个数组为:1,7,9,29,45 输出结果为:1,4,7(第一个数组) 9,12,28,29,45(第二个数组)
请帮忙给出正确答案和分析,谢谢!
参考答案
正确答案:void ExchangeElem(int A[]int B[]int mint n)(/*分解两个有序数组A和B使A中所有元素都小于B中元素*//*mn分别表示数组A和B的长度*/while(A[m—1]> B[0]){ x=A[m一1];A[m一1]=B[0];i=1;while(i<n&&B[i])<x) /*查找x的位置*/{ B[i一1]=B[i];i++;}B[i一1]=x;j=m一2;x=A[m—1]; /*查找B[0]的位置*/while(j>=0&&A[j]>x){ A[j+1]=A[j];j--;)A[j+1]=x;}}
由于两个数组定长,设其长度分别为m和n,又知两个数组中的元素都非递减有序,重新排列元素后,第二个数组中所有元素都大于第一个数组中的所有元素。因此取第一个数组中的最后一个元素与第二个数组中的第一个元素进行比较,若第一个数组中的最后一个元素比第二个数组中的第一个元素小,则操作完毕,否则将第一个数组中的最后一个元素移到第二个数组的合适位置,将第二个数组中的第一个元素移到第一个数组的合适位置,重复上述过程,直到第二个数组中的第一个元素大于第一个数组中的最后一个元素为止。算法描述如下。