美文网首页
从未怀疑过你

从未怀疑过你

作者: 木易小熙 | 来源:发表于2023-10-18 01:20 被阅读0次

很久之前研究过快排,是的,很久之前。

当时网上随便看的文档没有很详细,再加上本身悟性不太高,就没有搞懂。会写,但是不太理解,为什么多选几次基数比几次大小就排好序了?

最近在看之前没看完的《算法图解》,先看了分治,又紧接着看了快排。才算是把这个问题想明白。

快排可以用归纳方法证明。

如果数组arr里面有0个数或者1个数你该如何排序?答案是直接返回。

如果数组里有2个数呢?这个时候我们可以以arr[0]为基数,若arr[1]比arr[0]大则去arr[0]的右边,否则则去左边。

如果数组里有3个数呢?我们还可以以arr[0]为基数,比较剩余两个数与基数的大小。假设剩余两个数都比基数小,则需要对其进行排序,在上面我们已经实现了。

如果数组里有4个数呢?我们仍可以选取arr[0]为基数,让其余数据依次对齐进行比较。再假如,这次其余三个数都比arr[0]大,现在我们只需要重复上一步即可。

那5个呢?6个呢?7个呢?最极端的情况无非是都比基数大,或者比基数小,只需要重复上面的操作即可,一直到数组的长度为1或0时结束。

归纳证明分为两步:基线条件和归纳条件。假设我要证明我能爬到梯子的最上面。归纳条件是:如果我能现在第一个横杠上,我就能爬到第二个横杠上。基线条件是:我已经现在了第一个横杠上。是不是跟上面的很像!证明快排的归纳条件是:如果证明了对包含一个元素管用,那么对两个元素则管用。如果对两个元素管用,那么对三个元素也管用,以此类推。基线条件是:证明了这种算法对空或1个元素管用。


终于要到重点了

众所周知,理解了跟能否写下来代码是两回事。由于原书是Python,我就想着能不能找个go版本的,结果在看完这一章还真的在评论区看到一位兄弟发的go版本代码。简单的测试了一下,能跑!

过了一会遇到了一道需要时间复杂度小于O(nlog(n))的算法,我立马就想到了刚刚测试过的代码。由于还需要修改很多东西,我就一阵爆改,随之提交代码,结果一直不能完全通过。然后我研究了一上午…最终发现是那位兄弟的代码出了问题!!!他在快排的时候没有考虑数组内会有相等的情况,所以在排序的时候会漏掉一些数据!!!自始至终,我把自己改的代码怀疑了一个遍,最后甚至怀疑是编译器的问题都没有怀疑过那位兄弟的代码……

还是要谢谢那位兄弟,不然我现在对快排的印象也不会这么深。

相关文章

  • 半生守候只为你

    半生守候只为你 何之言 我曾遗忘过世界,却从未遗忘过你。 我曾怀疑过一切,却从未怀疑过你。 我曾放下过所有,却从未...

  • 新的我

    你认识我 比我自己更多 我怀疑自我 你却肯定地说 你可以的 除了你的爱 我从未确信过什么 自从相遇 我竟从未疑惑过...

  • 真实故事‖爱的模样

    我曾怀疑过对你的爱,因为你的不乖;我从未怀疑过对你的爱,因为它就在那里,无须怀疑。 1. 旧历的六月二十六,七月十...

  • 从未怀疑

    还是很爱你,像春天的花开,夏天的雨滴,秋天的果实,冬天的阳光,一切都是那么干净,在该出现的季节里,呈现自己的美,在...

  • 诗一则

    我从未怀疑过 你的魅力削减半分 自私地不愿你过得好 日夜念我才是最好

  • 阿 甘

    从未怀疑过自己的价值观,从未怀疑过自己内心深处信仰的每一件东西,从头到尾没变过。傻傻的忠诚的,在上帝面前,在母亲面...

  • 打工族赚钱的生意来了,这两大生意将成就一批富人!你还在等什么

    马云说:你为什么穷?因为你想的太多,做的太少,遇事犹豫不决,总是在怀疑,但是从未怀疑过自己,如果你跟不上时代的发展...

  • 波澜不惊,

    遇上我,从未强求 喜欢我,从未怀疑过, 相恋时,你说三生换烟火。 上床时,你说以前的事不再提,过后面生活。 吵架时...

  • 2018-09-28

    最搞笑的就是我从未怀疑过的事情其实都是假的

  • 从未说过喜欢你(四)

    从未说过喜欢你(一) 从未说过喜欢你(二) 从未说过喜欢你(三) 从未说过喜欢你(四) 文/三...

网友评论

      本文标题:从未怀疑过你

      本文链接:https://www.haomeiwen.com/subject/dmgtidtx.html