Description
在有序的数列中插入若干个数,每插入一个数都要保持有序。
Input
输入两行,第一行输入5个有序数,第二行输入若干个插入的数,以-1结束。
Output
输出仅一行,输出所有数,用空格隔开。
Sample Input
3 5 7 9 11
15 0 8 -1
Sample Output
0 3 5 7 8 9 11 15
思路:先对第二行输入的数组进行排序,然后对两个升序数组进行合并
代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[5],b[100],c[200],n,i,j,t,k,j1;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=0;i<100;i++)
{
scanf("%d",&b[i]);
if(b[i]==-1)
break;
}
n=i;
//先对第二行输入的若干个数字进行排序
for(i=0;i<n-1;i++)
{
t=b[i];
j1=i;
for(j=i+1;j<n;j++)
{
if(b[j]<t)
{
t=b[j];
j1=j;
}
}
k=b[i];
b[i]=t;
b[j1]=k;
}
/*
for(i=0;i<n;i++)
printf("%d ",b[i]);
*/
j=0;
k=0;
i=0;
//进行两个升序数组的合并
while(j<5&&k<n)
{
if(a[j]<=b[k])
{
c[i]=a[j];
j++;
i++;
//printf("*\n");
}
else
{
c[i]=b[k];
k++;
i++;
//printf("**\n");
}
}
while(j<5)
{
c[i]=a[j];
j++;
i++;
}
while(k<n)
{
c[i]=b[k];
k++;
i++;
}
for(i=0; i<(5+n); i++)
printf("%d ",c[i]);
return 0;
}