数组合并排序

两个有序数组A(长度为n)和B(长度为m),要合并为一个更大的有序数组C(长度为m+n)。让i1索引数组A,让i2索引数组B,让i3索引数组C,三个索引号初值均为0。

情形1:当i1<n且i2<m时,A[i1]与B[i2]较小者赋予C[i3],发生传送数组的索引加1,再选A[i1]与B[i2]较小者赋予C[i3],直到条件不再满足(i1<n且i2<m不再成立)。

情形2:若i1<n,把A[i1]赋予C[i3],发生传送数组的索引加1,直到i1不再小于n时传送停止。

情形3:若i2<m,把B[i2]赋予C[i3],发生传送数组的索引加1,直到i2不再小于m时传送停止。

代码实现:

void  merge(int src1[],int src2[],int dest[],int n,int m);

void  merge(int src1[],int src2[],int dest[],int n,int m)
{
    int i1=0;
    int i2=0;
    int i3=0;
    int v1,v2,token;
    while(i1<n&&i2<m)
    {
        v1=src1[i1];
        v2=src2[i2];
        token=v1<v2;
        dest[i3++]=token ? v1:v2;
        i1+=token;
        i2+=1-token;
    }
    while(i1<n)
       dest[i3++]=src1[i1++]; 
    while(i2<m)
       dest[i3++]=src2[i2++];
}
void main()
{
    int src1[8]={1,4,7,9,12,23,46,72};
    int src2[6]={15,20,24,32,35,56};
    int dest[14];
    int n=8;
    int m=6;
    merge(src1,src2,dest,n,m);
    while(1);
}

运行结果:

dest[14]={1,4,7,9,12,15,20,23,24,32,35,46,56,72}。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值