各种算法总结四

接着就是我们所谓的堆栈排序了,

先来看看我们的堆排序;

 大根堆:  就是说父节点要比左右孩子都要大。

 小根堆:  就是说父节点要比左右孩子都要小。

尼玛,这个就不是对普通数组的排序了滴呀,这个是对我们的数据结构的基本排序的滴呀;我曹;

这个就是我们的基本数据结构滴呀;

卧槽尼玛逼的,这个太多数据结构里面的东西了,我擦,这里关键是要记住,逻辑结构到我么数组的关系映射滴呀;

 

我草你妈,前提,是这个数结构的规律,让后将数结构的规律映射到我们数组中,然后再到我们的数组中进行各种排序,我曹;

看我们堆排序的原理:

  若在输出堆顶的最小值之后,使得剩余n-1个元素的序列重又建成一个堆,则得到n个元素的次小值。如此反复执行,便能得到一个有序序列,这个过程称之为堆排序。

  堆排序(Heap Sort)只需要一个记录元素大小的辅助空间(供交换用),每个待排序的记录仅占有一个存储空间。

 

第一步是我们的数的存储:

一般使用我们的数组来表示我们的堆,拖跟节点在序号0处,i节点的父节点下标为(i-1)/2,i 节点的左右节点下标分别是我们的:

 2*i+1 和 2*1+2 

这里指的注意的是:如果根节点是从我们的1开始的,那么我它的做孩子和右孩子分别是我们的2I,2I+1

事例如下图:

 

问题: 如何将我们的一个无序序列构建成一个堆呢?

          如何在输出顶元素之后,调整剩余元素成一个新的堆呢?

这算法哎,老子已经无力吐槽了~

记住我们的规律,或则叫排序算法滴呀:若在输出项的最小值之后,使得剩余的n-1个元素的序列重又建立一个堆,则得到的n个元素的最小值,如此反复,便能得到我们的一个有序的序列滴呀;

下面我们就上具体的代码实现了滴呀;

算了,哥放弃了,这个太尼玛的复杂了;

 

posted @ 2016-12-22 16:38  咕-咚  阅读(111)  评论(0)    收藏  举报