QuickSort 错误总结

两次错误情况:

  1. swap函数实现错误,swap共实现错误两次
  2. 通过searchcode搜索到的参考代码是错误的,而自己对quicksort不够熟悉,导致无法确认quicksort能够做到什么程度,导致不能确定错误出在哪里,直至最后确定代码有误了之后,尝试按照自己的想法修改,最终正确。

两次的共同点:需要保护pivot值,即移到数组start或者end,在partition再放回来。

因为可能存在于pivot相等的值,所以你无法通过数值来判定是否pivot,只能通过物理的移动来做出区分。

另外,在调试过程中学到了一点:

用逻辑找bug,而不是穷举,这样速度更快。

逻辑的意思是,你调试的时候,根据自己的推断,写出这个时候应该输出什么,各个变量是什么值 然后在调试的时候和当时的输出结果对比,验证是否一样,一样说明这个阶段正确,不一样,问自己这个不一样可能是由什么样的原因导致的? 列出原因,然后写出因为这个原因出错,会在这个方向显示什么样子的结果?对照这个方向的结果,是否一致,一个可能性,一个可能性的去排查。

虽然初期有可能不熟悉,但是,真的习惯了列出错误这一项,效率很高很高。

就像先把事情列出来,然后一件事情一件事情的问自己目的,冲着目的去做事情, 虽然感觉前期很浪费时间,但是事实告诉了我,这样效率非常高,比我以前粗放的做法至少高2倍的效率。

这两个核心的一点就是:

把事情列出来,用纸笔或者电脑记下来,只有列出来,你才能把这个层次的东西放下,然后去深入探索其中某一项, 探索成功了固然好,失败了,可以回到第二个可能性继续尝试,而不用担心忘记。

而且能够 提醒自己,不要在往前走的过程中,走错方向了 ,只有记下才是真正的记录

虽然这些东西对有些人可能很基础,但是对我来说,这么做就是很大的进步。

加油!!