题解 | #有序序列合并#

有序序列合并

https://www.nowcoder.com/practice/a9e943b0dab142759807d0cfb6863897

#include <stdio.h>

/*
将两个升序排序的序列合并为一个有序序列
参数表:
size1 待合并数组arr1的大小
size2 待合并数组arr2的大小
mergeArr 用于记录合并后的数组
*/
void MergeArr(int arr1[], int size1, int arr2[], int size2, int mergeArr[])
{
    int size = size1 + size2;
    int index1 = 0;
    int index2 = 0;
    int i = 0; 
    for(index1 = 0, index2 = 0, i = 0; i < size; i++)
    {
        if(index1 < size1 && index2 < size2)
        {
            if(arr1[index1] < arr2[index2])
            {
                mergeArr[i] = arr1[index1];
                index1++;
            }
            else
            {
                mergeArr[i] = arr2[index2];
                index2++;
            }
        }else if (index1 >= size1) {
            //数组1中的元素已经全部合并完,剩下的按顺序存放数组2剩下的元素
            mergeArr[i] = arr2[index2];
            index2++;
        }else {
            //数组2中的元素已经全部合并完,剩下的按顺序存放数组1剩下的元素
            mergeArr[i] = arr1[index1];
            index1++;
        }
    }
}

int main() {
    int arr1[1000] = { 0 };
    int arr2[1000] = { 0 };
    int size1 = 0;
    int size2 = 0;
    scanf("%d %d", &size1, &size2);

    for(int i = 0; i < size1; i++)
    {
        scanf("%d", &arr1[i]);
    }
    for(int i = 0; i < size2; i++)
    {
        scanf("%d", &arr2[i]);
    }

    int mergeArr[2000] = { 0 };
    int size = size1 + size2;

    MergeArr(arr1, size1, arr2, size2, mergeArr);

    for(int i = 0; i < size; i++)
    {
        printf("%d ", mergeArr[i]);
    }

    return 0;
}

全部评论

相关推荐

Aki-Tomoya:窝趣,人家这是先富带动后富,共同富裕了属于是
投递英伟达等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务