我是觉得快排如果你看不懂或者刚开始学的话,应该先看一下<归并排序>;
快排的核心思想也是分治,只不过是讲分治变种化;
所以先理解<归并排序>这种纯正血统的分治思想 有利于帮助你更快速的学习并理解快排
说实话,是真的不爱学算法这类的东西, 针对工作而言没啥卵用, 看不见摸不着的,但是其实 算法有算法的魅力, 也有特殊需求(比如面试), 所以既然能看到这篇文章, 说明你对算法是有需求的, 那么请静下心来,将它学会, 你可以的
最后在哔哔一句, 算法看不懂 先用电脑敲一遍,挨个地方打log,然后带着你的疑问去看log打印出来的步骤, 别看不懂就 盯着别人写的代码 也不上手实操, 引用"马士兵"的一句话"你没有王语嫣的记忆力, 做不到看一遍就会了", 所以 踏乎的打开你的IDE 老实先写两遍吧
分治思想
首先 分治 是什么?
西瓜切两半, 你一半, 我一半,咳咳..... 跑远了
分治法的精髓:
分--将问题分解为规模更小的子问题;
治--将这些规模更小的子问题逐个击破;
合--将已解决的子问题合并,最终得出“母”问题的解;
此乃分治(分而治之)
一次次呼唤你 我的1997年~~~ 咳咳..又跑远了
快排分治变种化
上面提到了分治的正统思想,而他的核心在于先分后治;
那么为什么说快排是一个变种呢? 因为快排是在先治后分再治再分
正如我说的那样:世间万物皆有套路~
先治后分就是我理解的快排的套路(这句话才是这篇文章的核心, 敲黑板了啊~)
怎么个先治再分法?
答:
- 先找个"基准"(pivot)将数组重新排列(治);
- 数组重新排列一次后在根据这个基准将数组切开(分);
- 重复1, 2两步直至数组排序完成
动图制作中.... 未完待续
网友评论