已有一个排好序的数组,要求输入一个数后,按原来的顺序将其插入数组中。

已有一个排好序的数组,要求输入一个数后,按原来的顺序将其插入数组中。 这里有两段程序,我有几个细节问题想请教。 第一个程序:(传统的课后习题答案) #include<stdio.h> void main() { int a[6]={1,5,21,67,98}; int t1,t2,n,end,i,j; printf("original array is:\n"); for(i=0;i<5;i++) printf("%5d",a[i]); printf("\n"); printf("insert a new number:"); scanf("%d",&n); end=a[4]; if(n>end) /*if(n>end) a[5]=n;可以不要吗*/ a[5]=n; /*直接把下面的写成if语句可以吗?*/ else {for(i=0;i<5;i++) { if(a[i]>n) {t1=a[i]; a[i]=n; for(j=i+1;j<6;j++) { t2=a[j]; a[j]=t1; t1=t2; } break; } } } for(i=0;i<6;i++) printf("%6d",a[i]); } 第二个: #include <stdio.h> void main() { int i,k; int a[6]={1,5,21,67,98}; for(i=0;i<5;i++) printf("%d ",a[i]); printf("\n input a int number:\n"); scanf("%d",&a[5]); for(i=5;i>0;i--) if(a[i]<a[i-1]) { k=a[i-1]; a[i-1]=a[i]; a[i]=k; } for(i=0;i<6;i++) printf("%d ",a[i]); printf("\n"); } 这两个程序从主要思路上哪个更好点?why?~~先谢谢高手

第二个好, 第2个用了二重循环 {for(i=0;i<5;i++) { if(a[i]>n) {t1=a[i]; a[i]=n; for(j=i+1;j<6;j++) { t2=a[j]; a[j]=t1; t1=t2; } break; } } } 而第一个则没有,就这点上他的程序的空间复杂度就比第一个大了,空间复杂度是衡量一个程序的好坏的关键
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-26
后一种算法好一些,可读性强,由于数组中数很少,效率差别看不出来,如果数多的话建议先折半查找到合适位置,然后移动并插入数据即可
相似回答