/*
* 堆排序的最好最坏平均时间复杂度都为nlogn,adjustment执行次数为logn,for循环次数为3/2n
* 空间复杂度为O(1),没有使用额外空间*/
#include <stdio.h>
void swap(int &a, int &b) {
int temp;
temp = a;
a = b;
b = temp;
}
//将堆调整为大根堆
void Adjustment(int *a,int elePos,int len){
int dad=elePos;
int son=dad*2+1;
while(son<len){
if(son+1<len&&a[son+1]>a[son]){//选出左右孩子之中交的的一个
son++;
}
if(a[son]>a[dad]){//对堆进行调整
swap(a[son],a[dad]);
dad=son;//调整之后再对新的堆进行调整
son=dad*2+1;
}
else{//如果树已经有序那么不需要调整
break;
}
}
}
void HeapSort(int *a,int len){
for (int i = len/2-1; i>=0 ; i--) {//首先将数组调整为大根堆
Adjustment(a,i,len);
}
swap(a[0],a[len-1]);//将根元素放至最后一个位置
for(int i=len-1;i>0;i--){//i为无序的元素的个数
Adjustment(a,0,i);//每次交换之后只有第一个堆需要调整
swap(a[0],a[i-1]);//再次调整完之后再将根元素放置无序的最后一个位置
}
}
int main() {
int a[13] = {24, 49, 11, 223, 44, 55, 675, 321, 1,23,44,56,221};
HeapSort(a,sizeof a/sizeof(a[0]));
printf("after Heap sort\n");
for (int i = 0; i < sizeof a / sizeof(a[0]); ++i) {
printf("%-4d", a[i]);
}
return 0;
}
相关推荐
Unity雷达图效果实现
unity雷达图源码
HeapSort堆排序原理与实现
HeapSort堆排序原理与实现 堆排序是比较重要的数据结构,其主要优点是通过排序二叉树的特性能够记录每个数之间的大小关系,以至于不需要重复比较,对于海量数据排序问题可以减少时间复杂度。 一、基本概念 (1)大根堆(大顶堆):对于一个堆(完全二叉树),根结点的值是比所有结点的值都大,其子树中根结点的值也比子树中其他值都大。大根堆可以获得由小到大的递增序列;其定义为: A[i]≥A[2∗i]A[i]\ge A[2*i] A[i]≥A[2∗i]A[i]≥A[2∗i+1] A[i]\ge A[2*i+1]A
康耐视 VisionPro CogImageFileTool(将获得的图像保存至文件或从文件中获取图像)工具
VisionPro CogImageFileTool(将获得的图像保存至文件或从文件中获取图像)工具
堆排序(heapsort)
#include <iostream> using namespace std; void swap(int arr[], int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } void heapify(int tree[], int n, int i) { if (i >= n) { ...
MCGS 昆仑通态触摸屏 modbus TCP 数据转发
MCGS触摸屏数据转发modbus TCP数据转发
AHB不对称半桥反激电路设计(三)主要器件参数规格计算
本文介绍了AHB拓扑变压器的设计步骤与核心参数计算,包括主控芯片选择、工作原理分析及参数计算。作者选择DK87XXD集成MOS方案,详细阐述了输入电压范围、反射电压限定、匝比计算、工作频率设定、原副边电流值、电感量计算、磁芯选择、匝数计算、谐振电容设计等关键步骤。通过公式推导与实例计算,展示了150W电源的变压器设计过程,最终确定匝比5.5、原边22匝、副边4匝、电感量200uH等参数。文章还讨论了谐振电容与漏感的关系,为后续调试提供理论基础。该设计方法结合理论分析与工程实践,适用于AHB拓扑电源开发。
FreeBSD中堆排序的实现heapsort
FreeBSD中堆排序的实现heapsort 源码:https://github.com/freebsd/freebsd/blob/master/lib/libc/stdlib/heapsort.c 使用文档:https://www.freebsd.org/cgi/man.cgi?query=heapsort&sektion=3&manpath=freebsd-release-po...
ESP32-C3入门教程 问题篇⑳——subprocess.CalledProcessError: Command ‘[‘D:\\.espressif\\python_env\\idf5.4_py3.
ESP32-C3入门教程 问题篇⑳——subprocess.CalledProcessError: Command '['D:\\.espressif\\python_env\\idf5.4_py3.
heapsort(堆排序)
#include&amp;lt;cstdlib&amp;gt; #include&amp;lt;cstdio&amp;gt; #include&amp;lt;cstring&amp;gt; #include&amp;lt;vector&amp;gt; using namespace std; int heapsize; int father(int i) { re
基于C++和Qt开发IEC104规约主站调试软件(第二章)
本章节主要讲解iec104主站软件界面设计和从站的连接功能以及部分功能代码的展示。
2024华为OD机试真题-矩阵匹配-C++-OD统一考试(C卷D卷)
从一个 N * M(N ≤ M)的矩阵中选出 N 个数,任意两个数字不能在同一行或同一列,求选出来的 N 个数中第 K 大的数字的最小值是多少。输入描述输入矩阵要求:1 ≤ K ≤ N ≤ M ≤ 150
堆排序(heapsort)总结
在B站看了up主【正月点灯笼】的堆排序(heapsort) 虽然听得明明白白,但是自己复现的时候还是花了一个小时,自己写一遍加深印象&&对细节把握更深 up用C,我用python 作为一个记录型的帖子,大家想搞懂的话,还是建议点上面的链接去看大佬的视频 def heapify(tree, n, i): ''' 从节点i出发,往下一直做heapify操作: 16:35 heapify的任务:底层已经是稳定的堆了,但是tree[i]为根的二叉树不稳定,从上往下递归,完成p
Python 实现生命游戏及进化模拟完整指南
生命模拟是进化计算的一个特定子集,模拟了自然界中所观察到的自然过程,例如粒子或鸟群的聚集方式。生命模拟只是用来探索和优化问题的模拟形式之一,还有很多其他形式的模拟,可以更好地建模各种过程,但它们都源于康威生命游戏 (Conway’s Game of Life)。在本节中,我们将介绍生命模拟的基本概念,并使用 Python 实现康威生命游戏。
堆排序 heapsort
堆排序 运行时间为O(n lg n) 原地排序算法:在任何时候,数组中只有常数个元素存储在输入数组之外。 堆排序利用了某种数据结构来管理算法执行中的信息——堆数据结构。 堆: (二叉)堆数据结构是一种数据结构,可以视为一颗完全二叉树。二叉堆有两种:最大堆、最小堆。 堆是用一维数组存储: 我们可以把堆想象成下图的样子:(尽管堆本质上是一个...
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
C++ 堆排序(HeapSort)
一、思路: (1)将数组arr[0~n-1]调整形成最大堆; (2)取堆顶点(即取最大值)放到数组arr[n-1]的位置,即将arr[0]与arr[n-1]交换位置; (3)调整arr[0]到arr[n-2]重新形成最大堆; (4)同理,取堆顶arr[0](即取最大值)放到数组arr[n-2]位置,即交换arr[0]与arr[n-2]位置; (5)重复以上步...
最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版
Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。
堆排序heapsort
class __declspec(dllexport) HeapSort { public: HeapSort(int* a, int len); ~HeapSort(); void AdjustHeap(); private: int* array_; int length_; }; void swap(int* a, int* b) { int
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
堆排序(HeapSort)
本文主要介绍堆排序算法(HeapSort),堆排序像合并排序而不像插入排序,堆排序的运行时间为O(nlgn);像插入排序而不像合并排序,它是一种原地(in place)排序算法。在任何时候,数组中只有常数个元素存储在输入数组以外,这样,堆排序就把插入排序和合并排序的优点结合起来。 堆排序还引入了另外一种算法设计技术,利用某种数据结构(在此算法中为“堆”)来管理算法执行中的信息。堆数
Heapsort 堆排序
Heapsort 堆排序 转载https://blog.youkuaiyun.com/qq_34840129/article/details/80638225的图解,讲得很清晰。 图解: 下面用图来解释堆排序的具体过程: 假设最初的无序的列表为[5,6,8,1,2,4,9],经过堆的初始化操作后得到的对堆结构如下: 然后开始进行堆排序,每次都交换堆顶和末尾元素,然后对堆顶元素进行一次向下筛选,带颜色区域为...
python实现堆排序用类的方法_python实现堆排序(HeapSort)
python实现【堆排序】(HeapSort)算法原理及介绍堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法****。堆实质是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序**。算法过程描述将初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区;将堆顶元素R...
堆排序 heapsort
#include <iostream> using namespace std; void heapify(int arr[], int n, int i) { int largest = i; int l = 2*i + 1; int r = 2*i + 2; if (l < n &...
堆排序(Heapsort)
把堆排序分成一个个小任务
二叉堆和堆排序Heapsort
二叉堆是一种数据结构。 ___________________________________________________________________________________________________________________________________ 堆:(二叉)堆数据结构是一种数组对象。它可以被视为一棵完全二叉树,树中每个结点与...
堆排序算法(HeapSort)
堆排序算法(HeapSort):堆的概念及常见操作、堆排序算法思想、性能分析、代码实现(Java)
1026



被折叠的 条评论
为什么被折叠?



