序列的合并问题
思路:设置两个下标i和j,初始值为0,表示分别指向序列A 的第一个元素和序列B的第一个元素,然后根据A[i]与B[j]的大小决定哪一个放在序列C
①若A[i]<B[j],说明 A[i]是当前序列A与序列B的剩余元素中最小的那个,因此把A[i]加入序列C中,并让i加1(即让i右移一位)
②若A[i]>B[j],说明 B[j]是当前序列A与序列B的剩余元素中最小的那个,因此把B[j]加入序列C中,并让j加1(即让j右移一位)
③若A[i]==B[j],则任选一个加入序列C中,并让其对应的下标加1
int merge(int A[],int B[],int C[],int n,int m){
int i=0,j=0,index=0;
while(i<n&&j<m){
if(A[i]<=B[j]){
C[index++]=A[i++];
}else{
C[index++]=B[j++];
}
}
while(i<n) C[index++]=A[i++];
while(j<m) C[index++]=B[j++];
return index;
}
#include<iostream>
using namespace std;
int main(){
int A[6]={1,3,5,7,9,11};
int B[3]={8,10,13};
int C[10];
merge(A,B,C,6,3);
for(int i=0;i<9;i++){
printf ("%d\t",C[i]);
}
return 0;
}
输出结果:1 3 5 7 8 9 10 11 13