堆排序

简介: 堆排序

堆排序

堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是
通过堆来进行选择数据。需要注意的是排升序要建大堆,排降序建小堆。

image.png

void Swap(int* e1, int* e2)
{
    int tem = *e1;
    *e1 = *e2;
    *e2 = tem;
}
void AdjustDown(int* a, int n, int parent)
{
    int child = parent * 2 + 1;
    while (child < n)
    {
        if (child + 1 < n && a[child] < a[child + 1])
        {
            child++;
        }
        if (a[parent] < a[child])
        {
            Swap(&a[parent], &a[child]);
            parent = child;
            child = parent * 2 + 1;
        }
        else
        {
            break;
        }
    }
}

void HeapSort(int* a, int n)
{
    for (int i = (n - 2) / 2; i >= 0; i--)
    {
        AdjustDown(a, n, i);
    }

    for (int i = 0; i < n; i++)
    {
        Swap(&a[0], &a[n - 1 - i]);
        AdjustDown(a, n - i - 1, 0);
    }
}

直接选择排序的特性总结:

  1. 堆排序使用堆来选数,效率就高了很多。
  2. 时间复杂度:O(N*logN)
  3. 空间复杂度:O(1)
  4. 稳定性:不稳定
相关文章
|
27天前
|
存储 搜索推荐 算法
堆排序讲解
堆排序讲解
17 4
|
4月前
|
存储
|
5月前
|
分布式计算 搜索推荐 Java
堆排序就是这么容易
堆排序就是这么容易
42 0
|
6月前
|
算法 搜索推荐 Java
选择排序 - 堆排序
选择排序 - 堆排序
选择排序 - 堆排序
|
6月前
|
搜索推荐 算法 C++
C++堆排序的实现
C++堆排序的实现
|
6月前
选择排序与堆排序
选择排序与堆排序
38 0
|
6月前
|
算法 搜索推荐 索引
堆排序详细解读
堆排序详细解读
58 0
|
算法 索引 搜索推荐
|
机器学习/深度学习 算法 搜索推荐
排序算法:堆排序
关于排序算法中的堆排序的详细介绍,以及实现过程和时间复杂度的计算,附带图解。
104 1
|
算法 搜索推荐