各种算法总结四
接着就是我们所谓的堆栈排序了,
先来看看我们的堆排序;
大根堆: 就是说父节点要比左右孩子都要大。
小根堆: 就是说父节点要比左右孩子都要小。
尼玛,这个就不是对普通数组的排序了滴呀,这个是对我们的数据结构的基本排序的滴呀;我曹;
这个就是我们的基本数据结构滴呀;

卧槽尼玛逼的,这个太多数据结构里面的东西了,我擦,这里关键是要记住,逻辑结构到我么数组的关系映射滴呀;
我草你妈,前提,是这个数结构的规律,让后将数结构的规律映射到我们数组中,然后再到我们的数组中进行各种排序,我曹;
看我们堆排序的原理:
若在输出堆顶的最小值之后,使得剩余n-1个元素的序列重又建成一个堆,则得到n个元素的次小值。如此反复执行,便能得到一个有序序列,这个过程称之为堆排序。
堆排序(Heap Sort)只需要一个记录元素大小的辅助空间(供交换用),每个待排序的记录仅占有一个存储空间。
第一步是我们的数的存储:
一般使用我们的数组来表示我们的堆,拖跟节点在序号0处,i节点的父节点下标为(i-1)/2,i 节点的左右节点下标分别是我们的:
2*i+1 和 2*1+2
这里指的注意的是:如果根节点是从我们的1开始的,那么我它的做孩子和右孩子分别是我们的2I,2I+1
事例如下图:

问题: 如何将我们的一个无序序列构建成一个堆呢?
如何在输出顶元素之后,调整剩余元素成一个新的堆呢?
这算法哎,老子已经无力吐槽了~
记住我们的规律,或则叫排序算法滴呀:若在输出项的最小值之后,使得剩余的n-1个元素的序列重又建立一个堆,则得到的n个元素的最小值,如此反复,便能得到我们的一个有序的序列滴呀;
下面我们就上具体的代码实现了滴呀;
算了,哥放弃了,这个太尼玛的复杂了;
浙公网安备 33010602011771号