用插入排序法对10个数进行降序排列
#define A 10
#include <stdio.h>
int main()
{
int a[A+1],i,j,t;
for(i=1;i<=A;i++)
scanf("%d",&a[i]);
for(i=2;i<=A;i++)
{for(j=i-1;j>=1;i--,j--)
if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;}
** else break;**
}
for(i=1;i<=A;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
中间这个 else break;必须要加上吗?我觉得不用呀,,因为如果不满足if的话应该能进行下一次循环呀,,,可我去掉之后运行不了。。。为啥
你不觉得你的这个程序已经进入一个死循环了吗。。。。。那个break只是纠正这个死循环,让你误以为程序是没有问题的,但是实际的问题是:
因为你的i是在循环体外面申明的变量,所以在你的嵌套循环中,里面循环结束后,i的值都会减小为1,然后外层循环又给i加了1,到了里面的循环
又减小到1,于是就无限循环了下去。。。。。
必须加。内层有个i--,影响到外层循环。如果没有break,内层总会i--,外层i++,就会进入死循环。
你自己找10个数,单步执行几个循环就明白了。