1. 排序算法面试中 面试高频又快排、堆排和归并排序
先说快排,快排体现的的思想是:分而治之,并且递归
怎么个分呢, 选第一个数进行强行将数据分成两拨。
此时需要一个函数强行分开。名字随便写一个
这个方法是很重要的:(一般出问题的就是这个方法):
形式是简单的:
就一个找middle,一个递归函数。(递归是不去用理解的,你只需要把它当成一个已经解决问题的方法就行了)
找middle有很多种方法(魔鬼在细节好可怕啊)
1. 覆盖
首先看while循环
覆盖的方法: 可以让 left = right出圈。 先从右边开始移动
2. 交换
记住,在出while循环的时候,一定要让i > j ,如果 循环跑出来的是i==j 那么,当j最后是一个很大值的话,就出问题了
快排的思想感觉像是强制让每个元素找准自己的定位
归并排序:体现的是先分再合的思想。
其核心代码:
先局部后全局。
堆排序:首先是建堆
建堆的过程就是调堆,将小的值下沉,然后形成局部的最大堆,然后从底层一直向上走,就建成整体的最大堆。
建立堆之后,将堆顶和最后一个值交换,然后调堆,让顶部的元素下沉。
因此调堆的过程就是小元素下沉的过程,最重要的调堆,就是一个下沉,并且是递归下沉
建堆就从最小的堆开始往上建堆:
标签:递归,建堆,调堆,快排,算法,排序,下沉 From: https://www.cnblogs.com/followers/p/16593523.html