堆排序

简介: 堆排序

堆排序

堆排序(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. 稳定性:不稳定
相关文章
|
2月前
|
搜索推荐 算法
【排序算法】堆排序详解与实现
【排序算法】堆排序详解与实现
|
2月前
|
搜索推荐 算法 C++
C++堆排序的实现
C++堆排序的实现
|
2月前
|
算法 搜索推荐 Java
选择排序 - 堆排序
选择排序 - 堆排序
选择排序 - 堆排序
|
2月前
|
存储
堆排序、快速排序和归并排序
堆排序、快速排序和归并排序
25 0
|
2月前
选择排序与堆排序
选择排序与堆排序
17 0
|
4月前
|
算法 搜索推荐 索引
堆排序详细解读
堆排序详细解读
27 0
|
5月前
|
搜索推荐 算法 Java
java排序算法:快速排序、归并排序、堆排序等
排序算法:快速排序、归并排序、堆排序等
62 0
|
10月前
|
算法 搜索推荐
|
10月前
|
算法 索引 搜索推荐
|
11月前
|
存储 算法 搜索推荐
排序算法——堆排序
排序算法——堆排序