顺序表-增(插入)

本文介绍了如何在升序数组中插入元素保持有序及合并两个升序数组为一个升序数组的方法。提供了两种插入元素的函数实现,并给出了三种不同的数组合并算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)例:设数据集合data={2,5,7,8,10,14,16},升序有序,将某个关键字key,插入到数据集合中,使其依然有序。

①int JosephRing(int data[],int n,int key)
{
    int i,j;
    for(i=0;i<n && data[i]<key;i++);
    for(j=n;j>i;j--)
    {
        data[j]=data[j-1];
    }
    data[j]=key;
    return n+1;
}
②int JosephRing(int data[],int n,int key)
{
    int i;
    for(i=n-1;i>0 && data[i]>key;i--)
    {
        data[i+1]=data[i];
    }
    data[i+1]=key;
    return n+1;
}

2)例:设data1和data2是两个升序列,将data1和data2和并成一个升序序列。
如:data1={2,3,4,5,8,10,12,14,15}
data2={3,3,5,6,7,8};

int Merge(int data1[],int n1,int data2[],int n2,int data[])
{
    int i,j,k;
    i=j=k=0;
    while(i<n1 && j<n2)//当两者都未完时
    {
        if(data1[i]<data2[j])
            data[k++]=data1[i++];
        else
            data[k++]=data2[j++];
    }
    //当有一者进行判单完时,需要对两者进行判断
    while(i<n1)
    {
        data[k++]=data1[i++];
    }
    while(j<n2)
    {
        data[k++]=data1[j++];
    }
    return k;
}
②int Merge(int data1[],int n1,int data2[],int n2,int data[])
{
    int i,j,k;
    i=j=k=0;
    while(i<n1 && j<n2)
    {
        if(data1[i]<data2[j])
            data[k++]=data1[i++];
        else
            data[k++]=data2[j++];
    }
    //当有一者进行判单完时,进行抽象
    int *s=data1;
    if(j<n2)
    {
        s=data2;
        i=j;
        n1=n2;
    }
    while(i<n1)
    {
        data[k++]=s[i++];
    }
    return k;
}
③int Merge(int data1[],int n1,int data2[],int n2,int data[])
{
    int i=0,j=0,k=0;
    while(i<n1 || j<n2)
    {
        /*
            将data1的值给data的条件:
            ⅰ.data2进行完
            ⅱ.data2未完,data1未完且data1当前值小于data2当前值
            其余情况data2值给data
        */
        if(j==n2 || (i<n1 && data1[i]<data2[j]))
            data[k++]=data1[i++];
        else
            data[k++]=data2[j++];
    }
    return k;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值