今天很郁闷!!!!但现在又很开心。。我承认我是一个不太注意细节的人,今天真的给了我一次很深的 教训!!!!从昨天晚上开始,我开始进入了堆排序了,其实写代码有时真的很容易,通过编译器检查也真的很容易!!但能否得到自己想要的结果却很难!!!往往得到的一般不是自己预计的目标或结果,真的我以前,现在都深有体会!!!!
昨天其实我没花多少时间就写好了堆排序!但我为了得到一个预期的结果,却为此付出了远远大于编写程序的时间,其实正如我们老师说的,你只需20%的时间写程序,但你得花80%的时间改程序!当你改程序的时间小于你写程序的时间的时候,你才真的成了编程高手!!往往就是一个小的 地方会让你花费N多的时间,这里我也想起了一个魔兽玩家说的话“高手往往是注意细节的人”,你可能没有很牛逼的微操,但只要你把握住另外每一个细节,你必将取胜!
言归正传,说说今天的问题,其实没什么问题,就是少了一个!号,很可笑吧,平常这么不起眼的小东西,竟然让我浪费了这么多的时间!!!!!!!!这里又想起了以前读过的关于制造卫星的书,书上说一根很小的头发丝都能导致卫星不能正常工作,今天我真的深有体会了!
这里说下我的问题:我的问题是排序不成功,结果和预计的相差很大!!
排除方法AND问题分析:
首先我在建堆的函数后面加了个输出,这里只是很简单的将数组里的数全部输出,根据输出我就能知道是否是建堆出了问题。经过检查果然建堆有问题,不能建堆。
然后我去查看建堆函数,检查后发现没有问题,但为什么建堆不成功了?我在检查我的shiftdown函数,开始只是检查了下while(){}大括号里的函数,认真检查了下,发现有问题,判断语句不对,在一种情况下会导致出错,然后我马上改了过来,原本以为这下搞定了,编译成功,运行后发现结果还是与预期相差很大,检查建堆还是没建,刚才不是改了么怎么会这样,难道removeMax()有错,在去检查removeMax(),发现屏蔽掉shiftdown函数后,结果还是一样的,有和没有都一样,这里可以肯定shiftdown函数一定有问题,在根据建堆的结果和排序后输出所得到的结果判断,shiftdown函数没有起到其本来的作用,仔细从头到尾检查下此函数,发现while语句判断出错!本来我想用没到达叶节点就不停的down下去,然而没到达叶节点返回的是false,我这少了个!号,也就是说此函数永远都不会down下去,while语句里面的代码=没有写!!!!!!!
总结:我得细心细心在细心,如果我以后想走上程序员的道路的话,我一定得改下我不注重细节的这个老得很又很不好的坏毛病!!!!!!