设顺序表用数组A[]表示,表中元素存储在数组0~m+n-1 的范围内,前m个元素递增,后n个元素递增,设计算法使整个设计表有序。

算法基本设计思想:从第m个元素开始循环,用变量temp储存,来逐个与A[m-1]..A[0]比较,当temp>A[j]时循环停下来,A[j+1]=temp,否则A[j]一直向后移动

代码:

#include <stdio.h>
#include <stdlib.h>

void insertelem(int *A,int m,int n)
{
    int i,j,temp;
    for(i=m;i<=m+n-1;i++)
    {
        temp=A[i];
        for(j=i-1;j>=0;j--)  //从需要插入元素的前一个位置的前一个找,表在不断向右更新
        {
            A[j+1]=A[j];
            if(temp>A[j]) break;

        }
        A[j+1]=temp; //循环多减了一个
    }
}

int main()
{

    int A[30],i,m,n;
    printf("输入m,n的值,再输入所有元素\n");
    scanf("%d%d",&m,&n);
    for(i=0;i<=m+n-1;i++) scanf("%d",&A[i]);
    insertelem(A,m,n);
    for(i=0;i<=m+n-1;i++) printf("%d ",A[i]);
    printf("\n");
    return 0;
}
 

时间复杂度:O(nm)  空间复杂度:O(1)

猜你喜欢

转载自blog.csdn.net/qq_39350434/article/details/81175344