⑶ 编写函数int merge(PS *p1,int m, PS *p2 ,int n) 。p1指向数组中保存m个联系人信息, p2指向数组中保存n个联系人信息。将p2数组中n个联系人信息合并到p1数组中。已知p1和p2数组中存储的联系人信息按成员id升序排列,合并后p1数组中的联系人信息仍按id升序排列。返回值为合并后p1数组中联系人信息的数量。
时间: 2023-12-03 14:45:29 浏览: 186
编写合并函数Merge 将升序的序列和降序的序列合并成升序的序列
下面是函数的代码实现:
```c
typedef struct {
int id;
char name[20];
char phone[12];
} PS;
int merge(PS *p1, int m, PS *p2, int n) {
int i = 0, j = 0, k = 0;
PS res[m + n];
while (i < m && j < n) {
if (p1[i].id < p2[j].id) {
res[k++] = p1[i++];
} else {
res[k++] = p2[j++];
}
}
while (i < m) {
res[k++] = p1[i++];
}
while (j < n) {
res[k++] = p2[j++];
}
for (i = 0; i < m + n; i++) {
p1[i] = res[i];
}
return m + n;
}
```
该函数的思路是使用归并排序的思想,将两个已排好序的数组合并成一个有序数组。具体实现时,我们定义一个新的数组 `res` 存放合并后的结果,然后依次比较 `p1` 和 `p2` 数组中的元素,将小的元素放入 `res` 数组中,并且对应的下标加一,直到遍历完其中一个数组。最后,将剩下的未遍历的元素依次放入 `res` 数组中,然后将 `res` 数组中的元素复制到 `p1` 数组中,返回合并后的元素个数。
阅读全文