开头的代码是不是有bug?

开头的代码是不是有bug?

相关截图:

https://img1.sycdn.imooc.com//climg/63398b6509827fe712640852.jpg

开头这段代码是不是有问题?

minIndex如果定义在第二层for循环外面的话,执行swap时minIndex指向的元素很可能不是最小的,导致arr[i]被错误地替换掉。

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
liuyubobobo 2022-10-02 23:53:32

minIndex 指向的是 arr[i...n) 区间里的最小元素的索引(而不是全局的最小元素的索引)。


如果你认为有错误,可以尝试:


1)进一步思考:在什么情况下会发生你说的错误?构造出相应的测试用例?


2)实际使用这个测试用例运转一下,看是否真的发生了错误?


3)如果真的有错误,将这个测试用例告诉我;如果没有发生错误,仔细看一下,为什么你认为代码的输出有错误,实际却是正确的?为什么实际输出和你认为的输出不一样?自己哪里想错了?


进步就再这个过程中。


继续加油!:)

  • 提问者 Masato1990 #1

    感谢老师国庆假期还不忘答疑。


    这个问题我就是在跑一个自己编的测试用例发现的,我的测试用例是:

    Integer[] arr = {1,5,4,8,0,2};

    排序结果是{1,2,0,4,5,8}


    我在debug模式看了一下,在[0,6)的区间也就是第一次大循环中:

    j=4的时候,因为0<1,1和0位置对调,swap执行完之后继续for循环,但此时minIndex还等于4;

    j=5的时候,arr[5]的比较对象是arr[4],2>1,这时直接跳到swap,arr[0]和arr[4]对调,1和0又调回来了……所以1就被钉在了第一个位置。


    把minIndex的声明放到内循环就能得到正常结果,不知道老师那边用这个测试用例跑的话会不会有问题。


    谢谢!


    2022-10-03 00:27:19
  • liuyubobobo 回复 提问者 Masato1990 #2

    我使用课程代码测试是没有问题的。请使用课程代码做一下测试。这个课程的完整代码可以参考这里:https://git.imooc.com/class-105/Play-Algorithms-and-Data-Structures?utm_source=material


    你的截图代码似乎也没有问题。你的运行代码应该不是截图代码,请再仔细检查你的实际运行代码是否有问题。(包括测试相关代码。)


    继续加油!:)

    2022-10-03 00:39:49
  • 提问者 Masato1990 回复 liuyubobobo #3

    找到问题了,我把swap写到内循环里面去了=。。=


    再次谢谢老师指点!



    2022-10-03 10:51:44
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2583    人
  • 解答问题       1082    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师