(c语言)有序序列合并

#include
//输入包含三行
//第一行包含两个正整数n,m,用空格分割,n表示第二行第一个升序序列中
//数字的个数,m表示第三行第二个升序序列中数字的个数
//第二行包含n个整数,用空格分割
//第三行包含m个整数,用空格分割

//输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m
//的升序序列中的元素重新进行升序序列排列合并

int main()
{
    int n = 0;
    int m = 0;
    scanf("%d %d",&n,&m);
    int arr1[n];  //vs系列的编译器都不可用变长数组
    int arr2[m];  //C99标准——变长数组
    //输入n个整数
    int i = 0;
    for (i = 0; i < m; i++)
    {
        scanf("%d",&arr1[i]);
    }
    //输入m个整数
    for (i = 0; i < m; i++)
    {
        scanf("%d",&arr2[i]);
    }
    //合并打印
    int j = 0;
    int k = 0;
    while (j < n && k < m)    //两个数组的元素都未越界
    {
        if (arr1[j] < arr2[k])
        {
            printf("%d ",arr1[j]);
            j++;
        }
        else
        {
            printf("%d ",arr2[k]);
            k++;
        }
    }
    if (j < n)    //arr2数组越界,说明arr1数组内还有元素,接下来将arr1数组中的元素输出完
    {
        for (1; j < n; j++)
        {
            printf("%d ",arr1[j]);
        }
    }
    else  //arr1数组越界,说明arr2数组内还有元素,接下来将arr2数组中的元素输出完
    {
        for (1; k < m; k++)
        {
            printf("%d ",arr2[k]);
        }
    }
    return 0;
}

你可能感兴趣的:(c语言,算法,数据结构)