冒泡排序中,这个例子,为什么i是从0开始,j不是呢?

{
int arr[9]={3,8,5,4,9,6,7,2,1};

//思考9个数需要几轮排序,一轮排序需要几次对比 
for(int i=0;i<9-1;i++)//排序轮数 i 下标0-7 //1
{
    for(int j=0;j<9-i-1;j++)//内层循环对比 对比次数 //2*
    {
    //如果前一个比胡一个大,交换两个数字 
    if(arr[j]>arr[j+1])
    {int temp=arr[j];
    arr[j]=arr[j+1];
    arr[j+1]=temp;} 
    }
}    
cout<<"排序后:"<<endl;
    for(int i=0 ;i<9;i++)
    {cout<<arr[i]<<" ";}//i为轮数下标
    cout<<endl;

}
j为每一轮排序需要的对比次数,那第一轮应该是8次,第二轮7次,第三轮6次,但是” 2 *"的意思不是 ,第一轮1次,第二轮2次吗?
为什么编译出来第一轮是8次?

2*

是什么?第一轮就是8次。
i等于0时,内循环终止条件为j<8,从0 到7所以执行8次。
i等于1时,内循环终止条件为j<7,从0 到6所以执行7次。
i等于2时,内循环终止条件为j<6,从0 到5所以执行6次。
。。。。

为什么i是从0开始,j不是呢?
j明明是从0开始的啊

好像j也是从零开始的吧!你从哪点看出他不是的?

第一轮是8次有什么问题吗,j是0到8啊,不就是8次吗


int arr[9] = { 3,8,5,4,9,6,7,2,1 };
    for (int i = 0; i < 9; ++i)  //这层循环控制大轮  //9次循环
    {
        for (int j = i+1; j <9; ++j) //这层循环控制小轮 //第一轮为 9-0-1,为8次。第二轮为7次。第三轮为6次 .......直到一次循环结束
        {
            if (arr[i] > arr[j])
            {
                swap(arr[i], arr[j]);
            }
        }
    }
    cout << "排序后" << endl;
    for (int i = 0; i < 9; ++i)
    {
        cout << arr[i] << endl;
    }

img