1. 排序算法面试中 面试高频又快排、堆排和归并排序
先说快排,快排体现的的思想是:分而治之,并且递归
怎么个分呢, 选第一个数进行强行将数据分成两拨。
此时需要一个函数强行分开。名字随便写一个
这个方法是很重要的:(一般出问题的就是这个方法):
形式是简单的:
就一个找middle,一个递归函数。(递归是不去用理解的,你只需要把它当成一个已经解决问题的方法就行了)
找middle有很多种方法(魔鬼在细节好可怕啊)
1. 覆盖
首先看while循环
覆盖的方法: 可以让 left = right出圈。 先从右边开始移动
2. 交换
记住,在出while循环的时候,一定要让i > j ,如果 循环跑出来的是i==j 那么,当j最后是一个很大值的话,就出问题了
快排的思想感觉像是强制让每个元素找准自己的定位
归并排序:体现的是先分再合的思想。
其核心代码:
先局部后全局。
堆排序:首先是建堆
建堆的过程就是调堆,将小的值下沉,然后形成局部的最大堆,然后从底层一直向上走,就建成整体的最大堆。
建立堆之后,将堆顶和最后一个值交换,然后调堆,让顶部的元素下沉。
因此调堆的过程就是小元素下沉的过程,最重要的调堆,就是一个下沉,并且是递归下沉
建堆就从最小的堆开始往上建堆:
标签:递归,建堆,调堆,快排,算法,排序,下沉 来源: https://www.cnblogs.com/followers/p/16593523.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。