老师您先看图,有个小细节的问题,没搞懂
来源:2-6 插入排序法的改进
我会回来的333
2021-04-28
这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 个数据,测试一下,看是否有问题?如果有问题,用单步跟踪的方式一步一步跟一遍代码,看看每一步程序是怎么执行的,各个变量是怎么变化的?和你想象的是否一样?如果不一样,那里和你想象的不一样?自己哪里想错了?
进步就再这个过程中哦。
继续加油!:)
112021-04-29 -
我会回来的333
提问者
2021-04-29
真调出来了,老师,我先用的5个元素debug的,先一步一步跟,然后反复重启debug重新生成数组,看每次头两三轮循环,想了好久,我上面那个出问题在最后一步a[j]=e问题上,如果改成您写的代码那肯定是没问题,因为我想不出来您那个变量是怎么想到那么用的,有点精巧,我想了个新的逻辑,自己想的这个逻辑,也能跑通,但就是时间上有点长,和没有优化过一样,我这个好像是多了好几次无用的判断,再加上number赋值时间,上涨到10万元素我看了下打印没啥问题,这个debug细节记住了,好好学一下debug,以前调程序老靠眼看,谁知道脑子和眼都不好用啊,厉害老师 : )
012021-04-30
相似问题