采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
这for循环的循环条件,为啥把这个a[j-1]>e也放进去了呢,没搞懂逻辑, 用正确的测试,这样优化后速度是没有优化时的4分之1左右,我就记住了您说的一句话,不优化时,每次交换的背后都有3次的赋值再加上访问数组所在元素的时间,优化后就只进行了1次赋值操作,这么一看结果差不多昂, 逻辑感觉太绕了怎么办呀???唉对了,老师昨天提问的那个问题,我想了个法,我现在不用反射写那个通用数组测试时间方法了,我导了个包,改这么麻烦的测了,哈哈哈,太菜了,
for(j = i; j > 0 && a[j - 1] > e; j --) 和
for(j = i; j > 0; j --) if(a[j - 1] > e) ... 是不等价的。
前者是循环结束的条件,在不满足时退出循环;后这不是。
我建议你首先使用一个小数据量,比如只有 4 个数据或者 8 个数据,测试一下,看是否有问题?如果有问题,用单步跟踪的方式一步一步跟一遍代码,看看每一步程序是怎么执行的,各个变量是怎么变化的?和你想象的是否一样?如果不一样,那里和你想象的不一样?自己哪里想错了?
进步就再这个过程中哦。
继续加油!:)
您那个逻辑感觉有点复杂,我又搞了个新逻辑,老师您看下,
真调出来了,老师,我先用的5个元素debug的,先一步一步跟,然后反复重启debug重新生成数组,看每次头两三轮循环,想了好久,我上面那个出问题在最后一步a[j]=e问题上,如果改成您写的代码那肯定是没问题,因为我想不出来您那个变量是怎么想到那么用的,有点精巧,我想了个新的逻辑,自己想的这个逻辑,也能跑通,但就是时间上有点长,和没有优化过一样,我这个好像是多了好几次无用的判断,再加上number赋值时间,上涨到10万元素我看了下打印没啥问题,这个debug细节记住了,好好学一下debug,以前调程序老靠眼看,谁知道脑子和眼都不好用啊,厉害老师 : )
大赞!这样做看似慢,但其实是真正理解了,同时这样的过程绝对让你对程序的理解更深刻了。一直保持这样的学习热情和态度,将来你就是大神!继续加油!:)
登录后可查看更多问答,登录/注册
课程专为:短时间内应对面试、升职测评等艰巨任务打造
8.8k 21
5.7k 3
4.9k 5
1.4k 18