{
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;
}