题目:将两个顺序表合并成一个新的有序表,并由函数返回结果顺序表。
思想:假设两个表递增有序,将顺序表A和B左对齐,将两个表中最左边的两个元素进行比较,将较小的那个放入表C中,然后将A和B两个表进行重新对齐,至到其中一个表为空,将不为空的那个表剩下的元素全部移到C表的后面。(类似归并排序)
代码:
bool Merge(SqLlist &A,SqLlist &B,SqLlist &C){
if(A.length+B.length >C.MaxSize){ //合并后超出顺序表的最大范围,则返回false
return false;
}
int i=0,j=0,k=0;
while(i<A.length&&j<B.length){//两两比较两个表中的元素中的元素,小的放入顺序表C中
if(A.data[i]<=B.data[j]){
C.data[k++]=A.data[i++];
}else{
C.data[k++]=B.data[j++];
}
}
//当其中一个表还有剩余时,将余下的元素全部放到顺序表C的末尾
while(i<A.length){
C.data[k++]=A.data[i++];
}
while(j<B.length){
C.data[k++]=B.data[j++];
}
C.length=k;
return true;
}
时间复杂度O(n);空间复杂度O(1)