已有一個排好序的陣列,今輸入一個數,要求按原來排序的規律將它插入陣列中
阿新 • • 發佈:2019-01-07
先來看看以下程式碼,這是其他博友的思路,這程式碼看似沒有問題,其實存在很大的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; }