先来看看以下代码,这是其他博友的思路,这代码看似没有问题,其实存在很大的BUG,当插入的目标比str[0]更小的时候就会出错。相信仔细的人就很容易发现问题。
#include<stdio.h>
int main()
{
int str[100]={1,3,4,5,6,7,8,9,10,89,100};
int i,len=0,num;
scanf("%d",&num);
while(str[len]) len++;
for(i=len-1;i>=0;i--)
{
if(str[i]>num){
str[i+1]=str[i];
}else{
str[i+1]=num;
break;
}
}
for(i=0;i<len+1;i++)
printf("%d ",str[i]);
return 0;
}
以下是我的思路:
#include<stdio.h>
int main()
{//定义数组长度,记住,数组定义长度一定要比预先设定的长度至少加一
int str[100]={1,3,4,5,6,7,8,9,10,89,100};
int i,len=0,num;
scanf("%d",&num);
while(str[len]) len++;//统计实际数组的长度
int length=len+1;//插入后总长度
for(i=0;i<len;i++)
{
if(num<=str[i])//找到插入位置
{
for( ;len>i;len--)
{
str[len]=str[len-1];//把之后的数往后挪移一位
}
str[i]=num;//把目标插入
break;
}
else if(num>str[len-1])
{//如果无法找到插入位置,则说明插入目标大于数组中所有数,则此时直接插入到最后
str[len]=num;
break;
}
}
for(i=0;i<length;i++)//输出插入后数组
{
printf("%d ",str[i]);
}
return 0;
}