冒泡排序的比较和交换次数的统计

/*TODO:起泡排序
 功能描述:实现起泡排序功能。
 MAX=1000;
                     将输入参数数组复制到临时变量数组,然后排序。
                     将移动次数累计赋值给Compare1,每次累加1,将交换次数累计赋值给Change1,每次累加3。
 参数说明:A-整形数组参数 待排序数组
 返回值说明:无
*/


void Pop(int A[max])
{
    int i, j, len, flag = 1 ,chage;

    int arry[max + 1];
    for (i = 0; i < max; ++i)
        arry[i] = cache[i];
    len = max;

    for (i = 0; i < max; i++)
    {
        for (j = 0; j < max-i; j++)
        {
            Compare1++;
            if (arry[j]  > arry[j + 1])
            {
                chage = arry[j];
                arry[j] = arry[j + 1];
                arry[j + 1] = chage;
                Change1+=3;
               }
          }
    }

}

我的答案:图片说明

标准答案:
比较次数为:50005000

交换次数为:103098750

不知道为啥交换次数少了 ;

还有一个问题 为了满足5000500我使用了

    for (j = 0; j < max-i; j++)
    但我平时为了防止 j+1 ;越界 都使用
    for(j=0;j<max-i-1 ;j++)

测试发现任然能够排序,不会越界这是为什么?

int arry[max+1]//数组长度加1了,刚好不越界
arry[max]是个随机值,会影响交换的次数。