算法分析:将两个表合并其实就是归并。
- 先判断:如果两个表长的和大于第三个表长,返回空。
- 用三个变量indexA,indexB,indexC分别表示当前处理表的长度,并将他们的初始值设置为0。
- 如果A中表的值比B中小,将A表接在C表,否则将B表接在C表。
- 如果A表还有剩余,直接追加到C表表尾,否则将B表追加到C表表尾。
- 更新C表的表长。
完整代码如下:
#include <stdio.h>
typedef struct {
int data[30];
int length;
} SqList;
void initSList(SqList &L) {
L.length = 0;
}
void merge(SqList A, SqList B, SqList &C) {
if (A.length + B.length > C.length) {
return ;
}
int indexA = 0, indexB = 0, indexC = 0;
//有一个表处理完毕后退出循环
while (indexA < A.length && indexB < B.length) {
//A表在左端
if (A.data[indexA] <= B.data[indexB]) {
C.data[indexC++] = A.data[indexA++];
} else {
//B在左端
C.data[indexC++] = B.data[indexB++];
}
}
//某个表还有剩余的内容,直接追加到表C的结尾
while (indexA < A.length)