当前位置: 首页 > news >正文

排序算法-堆积树排序法(HeapSort)

目录

排序算法-堆积树排序法(HeapSort)

1、说明

2、算法分析

3、C++代码 


排序算法-堆积树排序法(HeapSort)

1、说明

堆积树排序法是选择排序法的改进版,可以减少在选择排序法中的比较次数,进而减少排序时间。堆积排序法用到了二叉树的技巧,是利用堆积树来完成排序的。堆积树是一种特殊的二叉树,可分为最大堆积树和最小堆积树两种。

最大堆积树满足以下3个条件:

  1. 它是一棵完全二叉树。
  2. 所有节点的值都大于或等于它左右子节点的值。
  3. 树根是堆积树中最大的。

最小堆积树具备以下3个条件:

  1. 它是一棵完全二叉树。
  2. 所有节点的值都小于或等于它左右子节点的值。
  3. 树根是堆积树中最小的。

2、算法分析

  1. 在所有情况下,时间复杂度均为O(nlog_{2}n)
  2. 堆积排序法不是稳定排序法。
  3. 只需要一个额外的空间,空间复杂度为O(1)

3、C++代码 

#include<iostream>
#include<iomanip>
using namespace std;void Print(int* data, int size) {for (int i = 1; i < size; i++)cout << "[" << setw(2) << data[i] << "] ";cout << endl;
}void Swap(int& i, int& j) {int temp = i;i = j;j = temp;
}void ad_heap(int* data, int i, int size) {int j = 2 * i;int temp = data[i];int post = 0;while (j <= size && post == 0){if (j < size) {if (data[j] < data[j + 1])j++;}if (temp >= data[j])post = 1;else {data[j / 2] = data[j];j *= 2;}}data[j / 2] = temp;
}void Heap(int* data, int size) {for (int i = (size / 2); i > 0; i--)ad_heap(data, i, size - 1);for (int i = size - 2; i > 0; i--) {Swap(data[1], data[i + 1]);ad_heap(data, 1, i);}
}int main() {int data[9] = { 0,5,6,4,8,3,2,7,1 };int size = 9;cout << "原始数据:";Print(data, size);Heap(data, size);cout << "排序结果:";Print(data, size);return 0;
}

输出结果 

http://www.lryc.cn/news/206227.html

相关文章:

  • 名词解释 MongoDB
  • Look Back(cf div3 905)
  • Spring框架的发展历程
  • vue 级联查询5级--省/市/区/街道/社区
  • C++并发与多线程(8) | 互斥量
  • Power BI 傻瓜入门 3. 选择Power BI的版本
  • BadNets:基于数据投毒的模型后门攻击代码(Pytorch)以MNIST为例
  • freeRTOS内部机制——栈的作用
  • python 桌面软件开发-matplotlib画图鼠标缩放拖动
  • 【JavaScript基础】JavaScript头等函数的理解
  • 如何把项目上传到Gitee(详细教程)
  • Ubuntu挂载windows下的共享文件夹
  • 什么是WMS系统条码化管理
  • 【云原生之kubernetes实战】在k8s环境下部署moredoc文库系统
  • [Database] MySQL 8.x Window / Partition Function (窗口/分区函数)
  • openGauss Meetup(天津站)精彩回顾 | openGauss天津用户组正式成立
  • linux vim 删除多行
  • 低概率Bug,研发敷衍说复现不到
  • Web前端免费接入Microsoft Azure AI文本翻译,享每月2百万个字符的翻译
  • 1024 CSDN 程序员节-知存科技-基于存内计算芯片开发板验证语音识别
  • 【备考网络工程师】如何备考2023年网络工程师之错题集篇(3)
  • 密码学-SHA-1算法
  • Android View拖拽/拖放DragAndDrop自定义View.DragShadowBuilder,Kotlin(2)
  • 翻页视图ViewPager
  • 【可视化Java GUI程序设计教程】第4章 布局设计
  • Elasticsearch配置文件
  • 运维:mysql常用的服务器状态命令
  • k8s中kubectl陈述式资源管理
  • 11 个最值得推荐的 Windows 数据恢复软件
  • Docker从入门到实战