合并两个数组使之有序

思路:
设两个分别指向两数组的指针,只需比较这两个指针指向得数据,若从小到大排序:小数据的指针+1,并将其放到第三个数组中
问题:一个数组到结尾怎么办?
将另一个数组按顺序全部放入第三个数组

#include <stdio.h>


//合并两个有序数组,使之有序

void merge_arry(int* arr1,int n1,int* arr2,int n2,int* arr3,int n3)//传递三个数组,前两个为待合并,第三个为合并后
{
    //思路:
    //设两个分别指向两数组的指针,只需比较这两个指针指向得数据,
    //若从小到大排序:小数据的指针+1,并将其放到第三个数组中
    //一个数组到结尾怎么办?
    //将另一个数组按顺序全部放入第三个数组

    int i = 0;
    int j = 0;
    int k = 0;
    int flag_i = 0;
    int flag_j = 0;
    while (1)
    {
           if(i>n1-1)
           {
               flag_i = 1;
                break;
           }
           if(j>n2-1)
           {
               flag_j = 1;
               break;
           }
           if(*(arr1+i)<*(arr2+j))
           {


               *(arr3+k) = *(arr1+i);
                i++;
                k++;

           }
           else
           {
               *(arr3+k) = *(arr2+j);
               j++;
               k++;
           }

    }
    if(flag_i == 1)//说明是第一个数组都放入了第三个数组,那么将第二个数组放入第三个数组即可
    {
        while (arr2+j<arr2+n2)
        {

            *(arr3+k) = *(arr2+j);
            k++;
            j++;
        }
    }
    else
    {
        while (arr1+i<arr1+n1)
        {

            *(arr3+k) = *(arr2+i);
            k++;
            i++;
        }
    }
}

int main(int argc, char *argv[])
{
    int arr1[4]={1,3,5,7};
    int arr2[4]={2,4,6,8};
    int arr3[8]={0};
    merge_arry(arr1,4,arr2,4,arr3,8);
    int i = 0;
    for(i = 0;i<8;i++)
    {
        printf("%d\n",arr3[i]);
    }
    printf("Hello World!\n");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值