思路:
如有有序表A,B: A:1 2 4 5 5 B:2 3 3 6 7
1.一开始 i 指向 A的开头元素(即1),同理 j 指向 B开头元素(2)
2.A[i] 和 B[j] 中对比,选较小的放入新表C中
核心代码:
bool func(SeqList A,SeqList B,SeqList C)
{
if(A.length + B.length > C.length)
return false;
int i=0,j=0,k=0;
while(i<A.length && j<B.length)
{
if(A.data[i] <= B.data[j])
C.data[k++] = A.data[i++];
else if(B.data[j] < A.data[i])
C.data[k++] = B.data[j++];
}
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;
}
#include <stdio.h>
int main()
{
int d1[5]={1,5,6,7,8};
int d2[8]={2,3,7,8,10,11};
int d3[20]={0};
int i=0;
int j=0;
int k=0;
int n=0;
while(i<5 && j<8)
{
if(d1[i] < d2[j])
d3[k++] = d1[i++];
else if(d1[i] > d2[j])
d3[k++] = d2[j++];
}
while(i<5)
{
d3[k++] = d1[i++];
}
while(j<8)
{
d3[k++] = d2[j++];
}
for(n;n<k;n++)
{
printf("%d\n",d3[n]);
}
return 0;
}
结果:
1 2 3 5 6 7 7 8 8 10 11