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

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


猜你喜欢

转载自blog.csdn.net/qq_42552533/article/details/84960115