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 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能