堆排序(heap_sort)
一、学习要点:
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)相关推荐
- 经典排序算法学习笔记七——堆排序
堆排序 数据结构 数组 最差时间复杂度 O(n*log n) 最优时间复杂度 O(n*log n) 平均时间复杂度 O(n*log n) 最差空间复杂度 О(n) total, O(1) auxili ...
- 坚持完成这套学习手册,你就可以去 Google 面试了
from: http://geek.csdn.net/news/detail/107064 本文为掘金投稿,译文出自:掘金翻译计划 原文地址:Google Interview University 原 ...
- 【Kick Algorithm】十大排序算法及其Python实现
文章来源于NewBeeNLP,作者kaiyuan 写在前面 看到好像春招都已经陆续都开始了,最近抽空打算把自己和朋友的经验整理一下分享出来.作为一个刚刚经历秋招打击的自闭儿童,可以非常负责任地说手撕算 ...
- 经典排序算法及其Python实现
写在前面 前面学习了几种典型的数据结构,当然数据结构和算法是密不可分的,算法作为程序的一个重要部分也是在求职面试中屡问不爽的考点,最近我们就来整理一下一些经典的算法,包括排序.查找.图.动态规划等等. ...
- Google Interview University - 坚持完成这套学习手册,你就可以去 Google 面试了
作者:Glowin 链接:https://zhuanlan.zhihu.com/p/22881223 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 原文地址:Goo ...
- [译] Google Interview University 一套完整的学习手册帮助自己准备 Google 的面试
[译] Google Interview University 一套完整的学习手册帮助自己准备 Google 的面试 十一七天乐,看池博的github,发现这个markdown,转过来mark一下 原 ...
- Google Interview University | 坚持完成这套学习手册,你就可以去 Google 面试了
Google Interview University 一套完整的学习手册帮助自己准备 Google 的面试 原文地址:Google Interview University 原文作者:John Wa ...
- 如何成为一名Google工程师
[译] Google Interview University 一套完整的学习手册帮助自己准备 Google 的面试 原文地址:Google Interview University 原文作者:Joh ...
- (转) 坚持完成这套学习手册,你就可以去 Google 面试了
坚持完成这套学习手册,你就可以去 Google 面试了 系统 指针 value Google 面试 阅读6138 本文为掘金投稿,译文出自:掘金翻译计划 原文地址:Google Interv ...
- 七大排序(简洁明了,注释分明,思路清晰)
七大排序 不废话,直接上代码,注释分明,思路清晰. sortingmethod.h #ifndef SORTINGMETHOD_H #define SORTINGMETHOD_H#include &l ...
最新文章
- 【JDBC 报错】Connections could not be acquired from the underlying database!
- Android10.0 日志系统分析(四)-selinux、kernel日志在logd中的实现​-[Android取经之路]
- 【BETA】Mac技巧之查看苹果电脑 Mac OS X 系统是否开启 64 位运算,以及设置 32/64 位模式的方法...
- HashMap 和 HashTable 区别
- typedef enum的用法(枚举)
- Nginx教程系列二:Linux安装nginx
- 为什么应该用record来定义DTO
- 评测征集 | 2021全国知识图谱与语义计算大会
- C++学习攻略,怎样学好C++语言?
- oracle数据库定时同步工具,[每天自动同步一个数据库表的数据]sql server定时同步oracle数据表...
- 多线程 转账_Java多线程编程基础三(原子性,可见性和有序性)
- zoj 3209(DLX)
- VSCODE同步浏览器刷新
- 台式计算机无线上网设置,台式机如何设置无线上网
- python tkinter 按钮 Button增加图片
- JavaEE | 基本类型包装类
- 注册ArcGIS Online账号||免费使用21天(保姆级)
- 怎么找回xmind意外关机的文件_如何在意外关机后恢复文件
- Office使用的窍门和小提示
- Testlink使用文档
热门文章
- boost::mpi::cartesian_communicator相关用法的测试程序
- boost::math模块使用拉普拉斯(与正态比较)分布的示例的测试程序
- boost::minimum_degree_ordering用法的测试程序
- boost::ignore_unused的用法实例
- ITK:查找图像的更高导数
- ITK:使用ParallelizeImageRegion
- VTK:Utilities之AnimationScene
- OpenGL 位图字体渲染的实例
- OpenGL延迟着色之二
- 经典C语言程序100例之十八