请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师您先看图,有个小细节的问题,没搞懂

图片描述
图片描述
图片描述
这for循环的循环条件,为啥把这个a[j-1]>e也放进去了呢,没搞懂逻辑,
用正确的测试,这样优化后速度是没有优化时的4分之1左右,我就记住了您说的一句话,不优化时,每次交换的背后都有3次的赋值再加上访问数组所在元素的时间,优化后就只进行了1次赋值操作,这么一看结果差不多昂,
图片描述
逻辑感觉太绕了怎么办呀???唉对了,老师昨天提问的那个问题,我想了个法,我现在不用反射写那个通用数组测试时间方法了,我导了个包,改这么麻烦的测了,哈哈哈,太菜了,

正在回答

2回答

for(j = i; j > 0 && a[j - 1] > e; j --) 和

for(j = i; j > 0; j --) if(a[j - 1] > e) ... 是不等价的。


前者是循环结束的条件,在不满足时退出循环;后这不是。


我建议你首先使用一个小数据量,比如只有 4 个数据或者 8 个数据,测试一下,看是否有问题?如果有问题,用单步跟踪的方式一步一步跟一遍代码,看看每一步程序是怎么执行的,各个变量是怎么变化的?和你想象的是否一样?如果不一样,那里和你想象的不一样?自己哪里想错了?


进步就再这个过程中哦。


继续加油!:)

1 回复 有任何疑惑可以回复我~
  • 提问者 我会回来的333 #1
    您那个逻辑感觉有点复杂,我又搞了个新逻辑,老师您看下,
    回复 有任何疑惑可以回复我~ 2021-04-29 15:11:28
提问者 我会回来的333 2021-04-29 15:10:21

//img1.sycdn.imooc.com//szimg/608a5a14094aea2608710720.jpg

真调出来了,老师,我先用的5个元素debug的,先一步一步跟,然后反复重启debug重新生成数组,看每次头两三轮循环,想了好久,我上面那个出问题在最后一步a[j]=e问题上,如果改成您写的代码那肯定是没问题,因为我想不出来您那个变量是怎么想到那么用的,有点精巧,我想了个新的逻辑,自己想的这个逻辑,也能跑通,但就是时间上有点长,和没有优化过一样,我这个好像是多了好几次无用的判断,再加上number赋值时间,上涨到10万元素我看了下打印没啥问题,这个debug细节记住了,好好学一下debug,以前调程序老靠眼看,谁知道脑子和眼都不好用啊,厉害老师 : )

0 回复 有任何疑惑可以回复我~
  • 大赞!这样做看似慢,但其实是真正理解了,同时这样的过程绝对让你对程序的理解更深刻了。一直保持这样的学习热情和态度,将来你就是大神!继续加油!:)
    回复 有任何疑惑可以回复我~ 2021-04-30 01:13:30
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信