6.png

    1. /*
    2. 将两个有序顺序表合并成一个新的顺序表,并由函数返回新的结果顺序表
    3. 分析:
    4. 手动开辟一个数组空间,其大小要大于等于原始两个数组的长度,之后进行遍历,依次取较小值赋给新数组
    5. */
    6. #include <stdio.h>
    7. #include <stdlib.h>
    8. int *merge(int* l1,int* l2,int len1,int len2) {
    9. int* newArr = (int*)malloc(len1+len2);
    10. //if (*newArr == NULL) return;
    11. int k = 0,i = 0,j = 0;
    12. for (; i < len1&&j < len2;) {
    13. if (*(l1+i)<*(l2+j)) {
    14. *(newArr + k++) = *(l1 + i++);
    15. }
    16. else {
    17. *(newArr + k++) = *(l2 + j++);
    18. }
    19. }
    20. while (i < len1) {
    21. *(newArr + k++) = *(l1 + i++);
    22. }
    23. while (j < len2) {
    24. *(newArr + k++) = *(l2 + j++);
    25. }
    26. return newArr;
    27. }
    28. int main() {
    29. int l1[] = {1,3,5,8};
    30. int l2[] = {2,4,4,6,7};
    31. int len1 = sizeof(l1) / sizeof(int);
    32. int len2 = sizeof(l2) / sizeof(int);
    33. int *res;
    34. res = merge(l1,l2,len1,len2);
    35. for (int i = 0; i < len1 + len2; i++) printf("%d ",*(res+i));
    36. return 0;
    37. }