使用空间O(1),时间O(m+n)
#include<stdio.h>
#define lenA 5
#define lenB 6
int a[lenA+lenB] = {1,3,5,7,9};
int b[lenB] = {2,4,6,8,10,11};
void reverse_union(){
int _lenA = lenA;
int _lenB = lenB;
while(_lenA>0 && _lenB>0){
if(a[_lenA-1] < b[_lenB-1]){
a[_lenA-1+_lenB] = b[_lenB-1];
_lenB--;
}else if(a[_lenA-1] > b[_lenB-1]){
a[_lenA-1+_lenB] = a[_lenA-1];
_lenA--;
}else{
a[_lenA-1+_lenB] = a[_lenA-1];
_lenB--;
_lenA--;
}
}
if(_lenA == 0){
for(;_lenB>0;_lenB--)
a[_lenB-1] = b[_lenB-1];
}
}
int main(){
int i ;
reverse_union();
for(i=0;i<lenA+lenB;i++)
printf("%d ",a[i]);
}