思路分析:
-
堆排序主要是使用了堆的性质,进行排序操作,主要有两种方式
1)非原地排序:将给定数据,放入大顶堆中,然后不断取出堆的最大元素,直到堆为空。取出数据的顺序,就是待排序数据的降序(此方法需要创建额外的空间,用以存放取出的数据,所以空间复杂度为O(N))。
2)原地排序(常用):使用堆的元素下沉思想,在给定空间进行原地排序
a、给定任意待排序的数组可以看作是是一颗二叉树。
b、然后将此二叉树转换为一个大顶堆。
c、最后依次将大顶堆的最大元素放在指定位置(去掉最大元素后,堆最后一个元素坐标的下一个坐标)。
3)将给定数组转换为大顶堆(主要利用堆元素的下沉操作)
a、从堆的最后一个非叶子节点开始,依次往前,做下沉操作,直到下标为0;
b、具体下沉操作:若当前节点元素比较大的一个子节点的值要小,就需要将当前节点的值与较大节点的值做交换。然后将值较大的节点作为当前节点,继续做判断。直到当前节点为叶子节为止。