1. 程式人生 > >已有一個排好序的陣列,今輸入一個數,要求按原來排序的規律將它插入陣列中

已有一個排好序的陣列,今輸入一個數,要求按原來排序的規律將它插入陣列中

先來看看以下程式碼,這是其他博友的思路,這程式碼看似沒有問題,其實存在很大的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;
}