damywin 2020-03-28 19:18 采纳率: 100%
浏览 202
已采纳

关于冒泡排序内循环的问题?

include

void sort(int * a, int len)
{
int i, j, t;

for (i=0; i<len-1; ++i)
{
    for (j=0; j<len-1-i; ++j)
    {
        if (a[j] > a[j+1])  // >表示升序 <表示降序
        {
            t = a[j];
            a[j] = a[j+1];
            a[j+1] = t; 
        }
    }
}

}

int main(void)
{
int a[6] = {10, 2, 8, -8, 11, 0};
int i = 0;

sort(a, 6);

for (i=0; i<6; ++i)
{
    printf("%d ", a[i]);
}
printf("\n");

return 0;

}

看不懂for的内层循环,为什么要用j<len-1-i,看了下输出结果,发现,没有-1的话,那么结果会变成-8 0 1 2 8 10,就不是程序要的-8 0 2 8 10 11了,看定义是说内层循环时算每i趟排序次数,而这个次数是(N-i)趟,外层是看明白,就是整不明白内层为什么要-1??刚学不懂这些,麻烦诸位解答一二!多谢!

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-03-28 20:42
    关注
    当i=0的时候,数组范围是0~len-1,那么if (a[j] > a[j+1]) 为了保证a[j+1]不越界,此时j必须<=len-0-2
    所以j<=len-i-2或者j<len-i-1
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办