题目要求
存在两个有序的顺序表,将两个有序的顺序表合并成一个大的有序的顺序表
解题思路
- 假设有两个有序的顺序表s1和s2并申请一块s3用于存放最终顺序
- 依次比较s1和s2,将值小的数存入s3,并将其下标向后挪一个元素直到其中一个顺序表走到最后
- 将剩下的顺序表所有元素添加到s3末尾
代码实现
Seq *MergeSeq(Seq *s1, Seq *s2)
{ //入口参数检测
if (NULL == s1 || NULL == s2)
return NULL;
//创建s3存放合并后的顺序表
Seq *s3 = Create();
int i = 0; //s1下标
int j = 0; //s2下标
//直到其中一个顺序表走到头,将比较最小的元素放入s3
while(i < s1->size && j < s2->size)
{
if (s1->pData[i] > s2->pData[j])
{
Insert_Tail(s3, s2->pData[j]);
j++;
}
if (s1->pData[i] < s2->pData[j])
{
Insert_Tail(s3, s1->pData[i]);
i++;
}
}
//将s1剩下的元素添加到末尾
while(i < s1->size)
{
Insert_Tail(s3, s1->pData[i]);
i++;
}
//将s2剩下的元素添加到末尾
while(j < s2->size)
{
Insert_Tail(s3, s2->pData[j]);
j++;
}
return s3;
}