前言:
前几次讲了如何构建一个堆以及TopK算法,那么这次给大家分享一下堆排序的两种方法。
方法一
直接暴力解决,建一个小堆,把数组的数据依次push,随后每次Pop堆顶,放进数组里。不过该方法因为建堆有消耗,所以空间复杂度为 O(N)。
步骤:
1.构建小堆
2.把数组里的数据依次Push(添加)进堆里面
3.取堆顶元素,放入数组,随后Pop掉堆顶
构建的小堆
随后取堆顶元素,放入数组,在Pop掉堆顶元素。
代码
//堆排序 方式一
void Heap_Sort1(int* data,int n)
{
//建小堆
HP hp;
HeapInit(&hp);
int i = 0;
for (i = 0; i < n; i++)
{
//依次push
HeapPush(&hp,data[i]);
}