堆排序
堆排序:堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。
堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了
java代码实现堆排序的过程
首先,我们需要先交换每一个非叶子结点和他们的左右孩子节点,构造这三个节点为一个大顶堆.
以下代码的思想就是,交换结点以及他们左右孩子节点,找到最大值并交换位置
1 | /** |
上面的方法是构建结点以及孩子节点元素的交换步骤
下面我们需要,对数组中也就是完全二叉树中所有的非叶子结点,逐次遍历,对每一个非叶子结点都需要进行构造大顶堆的过程
1 | /** |
以上方法执行完,我们的数组完全二叉树就完全变成了一个大顶堆。每一个根节点都大于他们的左右孩子节点
构造完大顶堆之后,我们需要把大顶堆的根元素与最后一个位置的元素进行位置的交换。
交换代码如下:
1 |
|
上面是对排序中的各个步骤逐一的记录,下面是完整代码:
完整的堆排序算法如下:
1 | package study; |
快速排序
1 |
|
冒泡排序
1 |
|
选择排序
1 |
|