题目:有一个已经排好序的数组。现输入一个数,要求按照原来的规律将它插入数组中。
方法一
1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后
此元素之后的数,依次后移一个位置。
2.程序源代码:
#include "stdio.h"
#include "conio.h"
main()
{
int a[11]={1,4,6,9,13,16,19,28,40,100};
int temp1,temp2,number,end,i,j;
printf("original array is:/n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("/n");
printf("insert a new number:");
scanf("%d",&number);
end=a[9];
if(number>end)
a[10]=number;
else
{
for(i=0;i<10;i++)
{
if(a[i]>number)
{
temp1=a[i];
a[i]=number;
for(j=i+1;j<11;j++)
{
temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;
}
}
}
for(i=0;i<11;i++)
printf("%6d",a[i]);
getch();
}
方法二
程序分析:
原题没有说清是什么规律的顺序,先设为按数字的大小顺序由大到小
原题没有说清已知数组a[ ]元素个数,设数组b[ ]、元素个数比已给数组多一个,以便插入新数字
把数组的a[]元素顺序赋值给数组b[ ],把输入的数字赋值给b[ ]数组的最后一个元素
数组b[ ]的最后一个元素和前一个元素比较大小,大的放在前,小的放在后
程序源程序:
#include "stdio.h"
main()
{
int a[6]={15,13,10,9,8,7};
int b[7];
int i;
int x,y;
for(i=0;i<6;i++)
printf("%3d",a[i]);
printf("/nplease insert a number/n");
scanf("%d",&x);
b[6]=x;
for(i=0;i<6;i++)
{b[i]=a[i];
printf("%3d",b[i]);}
for(i=6;i>0;i--)
{ if(b[i]>b[i-1])
{y=b[i];
b[i]=b[i-1];
b[i-1]=y;}
else
break;
}
printf("/n");
for(i=0;i<7;i++)
printf("%3d",b[i]);
}