c语言else break;的问题

用插入排序法对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个数,单步执行几个循环就明白了。