思路:
如有有序表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
