排序算法系列文章
排序(一):冒泡排序
排序(二):选择排序
排序(三):堆排序
排序(四):插入排序
排序(五):二分搜索
排序(六):归并排序
排序(七):快速排序
排序(八):希尔排序
堆排序(Heap Sort)
- 堆排序可以认为是对选择排序的一种优化。
- 一般升序采用大顶堆,降序采用小顶堆。
算法步骤
①对序列进行原地建堆
②重复执行以下操作,直到堆的元素数量为1
- 交换堆顶元素与尾元素
- 堆的元素数量减1
- 对 0 位置进行 1 次 siftDown操作
自下而上的下滤(siftDown)
复杂度
- 最坏,最好,平均时间复杂度均为O(nlogn)
- 它也是不稳定排序
代码实现
public class HeapSort {
private static int heapSize;
public static void main(String[] args) {