【疑问】

老师,你好。

  关于项目5 排序,根据冒泡法排序以下写法

for (i=0;i<number;i++)
for(j=0;j<number-i;j++)

  就可以,你为什么要这样写:

for (i=0;i<number-1;i++)
for(j=0;j<number-i-1;j++)

  而且,两种写法运行结果一样。


【回答】

  很高兴你能关注到这个细节,这是一个好感觉。对n个数的排序,从冒泡的思想看,需要冒n-1次泡,只剩1个了,自然不用再冒泡,第一层关于i的循环就是控制这的,所以从0到n-2,即i<n-1即可,第二层关于j的循环同理。138页10个数的排序,你要注意到用的是

for(j=0;j<9;j++)
for(i=0;i<9-j;i++)

  对10个数的排序,我在讲课中用过

for(j=1;j<10;j++)
for(i=1;i<10-j;i++)

  i和j的初值是1,定义a[11]放10个数,实际a[0]元素是不用的。

  至于你的结果还对,需要上机时单步跟踪一下,多余操作恰好没有破坏已有的正确结果,还是选用的测试数据恰好对此错误无所谓。这实际上给你提醒的是,程序通过编译后,一组数据运行正确,往往还潜藏危机。

  设计测试用例是个技术活,先意识到这一点,后面再长进。程序设计的门道还不少,这是她的魅力所在,继续进步吧。