如何用PHP编写堆排序(Heap Sort)算法实现排序功能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2063个文字,预计阅读时间需要9分钟。
算法定义:在《大话数据结构》中,简单选择排序的原理如下:在前n个待排序的记录中(n+1个记录),选出最小(或最大)的一个记录,存放在序列的起始位置,然后再从剩余的n个记录中(n个记录)重复这个过程,直到所有记录排序完毕。
具体过程:首先,在未排序序列中找到最小(或最大)的元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
算法引进:
在这里我直接引用《大话数据结构》里面的开头:
在前面讲到 简单选择排序 ,它在待排序的 n 个记录中选择一个最小的记录需要比较 n - 1 次,本来这也可以理解,查找第一个数据需要比较这么多次是正常的,否则如何知道他是最小的记录。
可惜的是,这样的操作并没有把每一趟的比较结果保存下来,在后一趟的比较重,有许多比较在前一趟已经做过了,但由于前一趟排序时未保存这些比较结果,所以后一趟排序时又重复执行了这些比较操作,因而记录的比较次数较多。
如果可以做到每次在选择到最小记录的同时,并根据比较结果对其他记录做出相应的调整,那样排序的总体效率就会非常高了。而堆排序,就是对简单选择排序进行的一种改进,这种改进的效果是非常明显的。
基本思想:
在介绍堆排序之前,我们先来介绍一下堆:
《大话数据结构》里的定义:堆 是具有下列性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值,成为大顶堆(大根堆);或者每个节点的值都小于或等于其左右节点的值,成为小顶堆(小根堆)。
本文共计2063个文字,预计阅读时间需要9分钟。
算法定义:在《大话数据结构》中,简单选择排序的原理如下:在前n个待排序的记录中(n+1个记录),选出最小(或最大)的一个记录,存放在序列的起始位置,然后再从剩余的n个记录中(n个记录)重复这个过程,直到所有记录排序完毕。
具体过程:首先,在未排序序列中找到最小(或最大)的元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
算法引进:
在这里我直接引用《大话数据结构》里面的开头:
在前面讲到 简单选择排序 ,它在待排序的 n 个记录中选择一个最小的记录需要比较 n - 1 次,本来这也可以理解,查找第一个数据需要比较这么多次是正常的,否则如何知道他是最小的记录。
可惜的是,这样的操作并没有把每一趟的比较结果保存下来,在后一趟的比较重,有许多比较在前一趟已经做过了,但由于前一趟排序时未保存这些比较结果,所以后一趟排序时又重复执行了这些比较操作,因而记录的比较次数较多。
如果可以做到每次在选择到最小记录的同时,并根据比较结果对其他记录做出相应的调整,那样排序的总体效率就会非常高了。而堆排序,就是对简单选择排序进行的一种改进,这种改进的效果是非常明显的。
基本思想:
在介绍堆排序之前,我们先来介绍一下堆:
《大话数据结构》里的定义:堆 是具有下列性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值,成为大顶堆(大根堆);或者每个节点的值都小于或等于其左右节点的值,成为小顶堆(小根堆)。

