关于数组的一个大小排序,插入一个数据后,排序出错
程序代码:
#include<stdio.h> #include<math.h> int main(void) { int i,j,p,q,s,n,m,a[10]; for(i=0;i<10;i++) { scanf("%d",&a[i]); } for(i=0;i<10;i++) { p=i; q=a[i]; for(j=i+1;j<10;j++) { if(q<a[j]) { p=j; q=a[j]; } } s=a[i]; a[i]=a[p]; a[p]=s; printf("%d\t",a[i]); } printf("\n"); scanf("%d",&n); for(i=0;i<10;i++) { if(n>a[i]) { for(m=9;m>=i;m--) { a[m+1]=a[m];/*从a[9]开始一直到a[i]位的数据整体向后平移一位*/ } a[i]=n; /*第i位空出来用n补充,由于数据从大到小排列,故不再循环,跳出*/ break; } else if(i==9) a[i+1]=n;/*如果n比所有a[i]小,则放在i+1位*/ } for(i=0;i<=10;i++) { printf("%d\t",a[i]); } return 0; }
代码如上,求大侠检查。 ,结果如上,按结果所示,似乎是数据并没有后移一位,第i位的数据直接被n替换了(a[i]=n)