一、学习要点:
1.什么是堆?
a.完全二叉树;
b.子树满足根节点数值小于左右子节点数值,为最小堆;满足根节点数值大于左右子节点数值,为最大堆;
2.怎么维护堆的结构:
a.每一个子树都应该维护堆结构;
b.自下而上维护堆的结构;【(5,6,3,7,8)至上而下的维护,不能将最大的值放到最前头;】
3.堆排序:
不断的构建完整的堆结构;将最大的元素arr[0]与arr[size-1]进行交换;对交换后的arr[size-1]在构建堆结构;将最大的元素arr[0]与arr[size-2]进行交换,重复进行。
二、代码:

#include<iostream>
using namedpace std;
void heapdown(int *arr,int n,int i)
{int left=2*i+1;int right=2*i+2;int max=i;if(left<=n-1&&arr[left]>arr[max]){max=left;}if(right<=n-1&&arr[right]>arr[max]){max=right;}if(max!=i){int temp=arr[i];arr[i]=arr[max];arr[max]=temp;heapdown(arr,n,max);}
}
void headup(int *arr,int n)
{for(int i=(n-1-1)/2;i>=0;i--){heapdown(arr,n,i);}
}
void heapsort(int* arr,int n)
{for(int i=n;i>0;i--){heapup(arr,i);int temp=arr[0];arr[0]=arr[i-1];arr[i-1]=temp;}
}
int main()
{int a[10] = { 9,8,5,6,3,4,7,1,2,10 };heapsort(a,10);for (int i = 0; i < 10; i++){cout << a[i] << endl;}system("pause");return 0;}

三、运行结果:

堆排序(heap_sort)相关推荐

  1. 经典排序算法学习笔记七——堆排序

    堆排序 数据结构 数组 最差时间复杂度 O(n*log n) 最优时间复杂度 O(n*log n) 平均时间复杂度 O(n*log n) 最差空间复杂度 О(n) total, O(1) auxili ...

  2. 坚持完成这套学习手册,你就可以去 Google 面试了

    from: http://geek.csdn.net/news/detail/107064 本文为掘金投稿,译文出自:掘金翻译计划 原文地址:Google Interview University 原 ...

  3. 【Kick Algorithm】十大排序算法及其Python实现

    文章来源于NewBeeNLP,作者kaiyuan 写在前面 看到好像春招都已经陆续都开始了,最近抽空打算把自己和朋友的经验整理一下分享出来.作为一个刚刚经历秋招打击的自闭儿童,可以非常负责任地说手撕算 ...

  4. 经典排序算法及其Python实现

    写在前面 前面学习了几种典型的数据结构,当然数据结构和算法是密不可分的,算法作为程序的一个重要部分也是在求职面试中屡问不爽的考点,最近我们就来整理一下一些经典的算法,包括排序.查找.图.动态规划等等. ...

  5. Google Interview University - 坚持完成这套学习手册,你就可以去 Google 面试了

    作者:Glowin 链接:https://zhuanlan.zhihu.com/p/22881223 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 原文地址:Goo ...

  6. [译] Google Interview University 一套完整的学习手册帮助自己准备 Google 的面试

    [译] Google Interview University 一套完整的学习手册帮助自己准备 Google 的面试 十一七天乐,看池博的github,发现这个markdown,转过来mark一下 原 ...

  7. Google Interview University | 坚持完成这套学习手册,你就可以去 Google 面试了

    Google Interview University 一套完整的学习手册帮助自己准备 Google 的面试 原文地址:Google Interview University 原文作者:John Wa ...

  8. 如何成为一名Google工程师

    [译] Google Interview University 一套完整的学习手册帮助自己准备 Google 的面试 原文地址:Google Interview University 原文作者:Joh ...

  9. (转) 坚持完成这套学习手册,你就可以去 Google 面试了

    坚持完成这套学习手册,你就可以去 Google 面试了 系统  指针  value  Google  面试 阅读6138  本文为掘金投稿,译文出自:掘金翻译计划 原文地址:Google Interv ...

  10. 七大排序(简洁明了,注释分明,思路清晰)

    七大排序 不废话,直接上代码,注释分明,思路清晰. sortingmethod.h #ifndef SORTINGMETHOD_H #define SORTINGMETHOD_H#include &l ...

最新文章

  1. 【JDBC 报错】Connections could not be acquired from the underlying database!
  2. Android10.0 日志系统分析(四)-selinux、kernel日志在logd中的实现​-[Android取经之路]
  3. 【BETA】Mac技巧之查看苹果电脑 Mac OS X 系统是否开启 64 位运算,以及设置 32/64 位模式的方法...
  4. HashMap 和 HashTable 区别
  5. typedef enum的用法(枚举)
  6. Nginx教程系列二:Linux安装nginx
  7. 为什么应该用record来定义DTO
  8. 评测征集 | 2021全国知识图谱与语义计算大会
  9. C++学习攻略,怎样学好C++语言?
  10. oracle数据库定时同步工具,[每天自动同步一个数据库表的数据]sql server定时同步oracle数据表...
  11. 多线程 转账_Java多线程编程基础三(原子性,可见性和有序性)
  12. zoj 3209(DLX)
  13. VSCODE同步浏览器刷新
  14. 台式计算机无线上网设置,台式机如何设置无线上网
  15. python tkinter 按钮 Button增加图片
  16. JavaEE | 基本类型包装类
  17. 注册ArcGIS Online账号||免费使用21天(保姆级)
  18. 怎么找回xmind意外关机的文件_如何在意外关机后恢复文件
  19. Office使用的窍门和小提示
  20. Testlink使用文档

热门文章

  1. boost::mpi::cartesian_communicator相关用法的测试程序
  2. boost::math模块使用拉普拉斯(与正态比较)分布的示例的测试程序
  3. boost::minimum_degree_ordering用法的测试程序
  4. boost::ignore_unused的用法实例
  5. ITK:查找图像的更高导数
  6. ITK:使用ParallelizeImageRegion
  7. VTK:Utilities之AnimationScene
  8. OpenGL 位图字体渲染的实例
  9. OpenGL延迟着色之二
  10. 经典C语言程序100例之十八