插序法:
在原有的升序的序列中,插入一个数,并保持为升序序列。
#include<stdio.h>
int main()
{
int a[7]={2,4,9,16,17,20};
int i,j,x,n=6;
printf("请输入想要插入的数:");
scanf("%d",&x);
for(i=0;i<n;i++)
{
if(a[i]>x)
{
break; //从i=0开始遍历,直到找到比插入的数要大的数,停止,并记录此时的下表i.
}
}
for(j=n-1;j>=i;j--) //从数组的最后一位开始 ,每一位的数组元素下标都要加1,直到加到i(所找到数的下标,包括i)为止
{
a[j+1]=a[j];
}
a[i]=x; //把i原先的位置,让给x.
n++; //因为插入了一个新元素,数组的整体容量要加1.
for(i=0;i<n;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
注释很详细。
插入多组数字:
#include<stdio.h>
int main()
{
int a[100]={2,4,9,16,17,20}; //可以更改数组的容量,插入的数不要超界。
int i,j,x,c,n=6;
printf("请输入想要插入的数的个数:\n");
scanf("%d",&c);
while(c>0){ //加个循环,本质上还是插序法的本质。
printf("请输入想要插入的数:\n");
scanf("%d",&x);
for(i=0;i<n;i++)
{
if(a[i]>x)
{
break;
}
}
for(j=n-1;j>=i;j--)
{
a[j+1]=a[j];
}
a[i]=x;
n++;
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
c--;
}
return 0;
}