A-A+
已知两个定长数组A B 它们分别存放两个非降序有序序列 请编写程序把数组B序列中的数逐个插入
问题详情
已知两个定长数组A、B,它们分别存放两个非降序有序序列,请编写程序把数组B序列中的数逐个插入到数组A序列中,完成后两个数组中的数分别有序(非降序)并且数组A中所有的数都不大于数组B中的任意一个数。要求,不能另开辟空间,也不能对任意一个数组进行排序操作。例如, 数组A为:4,12,28; 数组B为:1,7,9,29,45 输出结果为:1,4,7(数组A) 9,12,28,29,45(数组B)
请帮忙给出正确答案和分析,谢谢!
参考答案
正确答案:void ReArranger(int A[]B[]mn)//A和B是各有m个和n个整数的非降序数组本算法将B数组元素逐个插入到A 中使A中各元素均不大于B中各元素且两数组仍保持非降序排列{while(A[m一1]>B[0]){x=A[m一1];A[m一1]=B[0];//交换A[m一1]和B[0]j=1;while(j<n&&B[j]<x)B[j一1]=B[j++];//寻找A[m一1]的插入位置B[j-1]=x;x=A[m—1];i=m一2;while(i>=0&&A[i]>x)A[i+1]=A[i一一];//寻找B[0]的插入位置A[i+1]=x;}}//算法结束
此问题考查的知识点是线性结构的查找。题目要求调整后数组A中所有数均不大于数组B中所有数。因两数组分别有序,实际是要求数组A的最后一个数A[m一1]不大于数组B的第一个数B[0]。由于要求将数组B的数插入到数组A中。因此比较A[m一1]和B[O],如A[m一1]>B[0],则交换。交换后仍保持数组A和数组B有序。重复以上步骤,直到A[m一1]≤B[0]为止。