常见排序算法之堆排序

堆排序

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

void AdjustDown(int* a, int n, int parent)
{
? ? int child = parent * 2 + 1;
? ? while (child < n)
? ? {
? ? ? ? // 找出小的那个孩子
? ? ? ? if (child + 1 < n && a[child + 1] > a[child])
? ? ? ? {
? ? ? ? ? ? ++child;
? ? ? ? }

? ? ? ? if (a[child] > a[parent])
? ? ? ? {
? ? ? ? ? ? Swap(&a[child], &a[parent]);
? ? ? ? ? ? // 继续往下调整
? ? ? ? ? ? parent = child;
? ? ? ? ? ? child = parent * 2 + 1;
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? break;
? ? ? ? }
? ? }
}

?

void HeapSort(int* a, int n)
{
? ? // 向下调整建堆
? ? // O(N)
? ? for (int i = (n - 1 - 1) / 2; i >= 0; i--)
? ? {
? ? ? ? AdjustDown(a, n, i);
? ? }

? ? // O(N*logN)
? ? int end = n - 1;
? ? while (end > 0)
? ? {
? ? ? ? Swap(&a[0], &a[end]);
? ? ? ? AdjustDown(a, end, 0);
? ? ? ? --end;
? ? }
}

堆排序的特性总结:

  1. 堆排序使用堆来选数,效率就高了很多。
  2. 时间复杂度:O(N*logN)
  3. 空间复杂度:O(1)
  4. 稳定性:不稳定

    常见排序算法之堆排序

文章链接: /25983.html

文章标题:常见排序算法之堆排序

文章版权:云服务器租用科技所发布的内容,部分为原创文章,转载请注明来源,网络转载文章如有侵权请联系我们!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
建站教程投稿分享

常见排序算法之选择排序

2023-12-14 9:58:02

建站教程

各个排序的效率比较

2023-12-14 10:41:23

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧

云服务器租用科技 - 最新云主机促销服务器租用优惠

http://www.vxiaotou.com