先来看看以下代码,这是其他博友的思路,这代码看似没有问题,其实存在很大的BUG,当插入的目标比str[0]更小的时候就会出错。相信仔细的人就很容易发现问题。
#include<stdio.h>int main(){int i,num;int str[]={1,3,4,5,6,7,8,9,10,89,100};int len=sizeof(str)/sizeof(str[0]);scanf("%d",&num);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 i,num;int str[]={1,3,4,5,6,7,8,9,10,89,100};int len=sizeof(str)/sizeof(str[0]);scanf("%d",&num);for(i=len;i>0&&str[i-1]>num;i--){str[i]=str[i-1];}str[i]=num;for(i=0;i<len+1;i++)printf("%d ",str[i]);return 0;}
优化后的程序就不会出现以上的BUG了。
以下是另一种思路:
#include<stdio.h>int main(){//定义数组长度,记住,数组定义长度一定要比预先设定的长度至少加一int i,num;int str[]={1,3,4,5,6,7,8,9,10,89,100};int len=sizeof(str)/sizeof(str[0]);int length=len+1;//插入后总长度scanf("%d",&num);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;}
如果觉得《已有一个排好序的数组 今输入一个数 要求按原来排序的规律将它插入数组中》对你有帮助,请点赞、收藏,并留下你的观点哦!