算法基本设计思想:从第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)