1.在有序数列当中插入一个数:(i从1开始)
//有序序列插入一个数
#include<stdio.h>
int main()
{
int n,a[110],i,m;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&m);
for(i=n;i>=1;i--)
{
if(a[i]>m)
{
a[i+1]=a[i];
}
else
{
a[i+1]=m;
break;//important
}
}
//如果插入的数字小于所有数字
if(i==0)
{
a[1]=m;
}
for(i=1;i<=n+1;i++)
{
printf("%d ",a[i]);
}
return 0;
}
//有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是
//升序。
2.(i从0开始)
#include<stdio.h>
int main()
{
int n=0;
int arr[51]={0};
int m=0;
scanf("%d",&n);
int i=0;
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
scanf("%d",&m);
for(i=n-1;i>=0;i--)
{
if(arr[i]>m)
{
arr[i+1]=arr[i];
}
else
{
arr[i+1]=m;
break;//关键点
}
}
//要插入的元素小于所有的元素
if(i<0)
{
arr[0]=m;
}
for(i=0;i<n+1;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
最后,总结一下,总体思路就是说:
你要从最后面开始比较
要插入的数字和已经排好的序列中的数字
如果比要插入的数字大就把这个数字向后移动一位(a[i+1]=a[i]);
否则如果小于要插入的数字就需要把当前位置的后一位当中放入这个要插入的数字
立刻break中断循环
还有就是如果已经排好的序列都比我们要插入的数字大,就把第一位赋值为要插入的数字
最后输出的时候输出比一开始多一位就可以了。