1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 已有一个排好序的数组 今输入一个数 要求按原来排序的规律将它插入数组中

已有一个排好序的数组 今输入一个数 要求按原来排序的规律将它插入数组中

时间:2024-02-05 07:09:02

相关推荐

已有一个排好序的数组 今输入一个数 要求按原来排序的规律将它插入数组中

先来看看以下代码,这是其他博友的思路,这代码看似没有问题,其实存在很大的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;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。