堆排序-heap sort
2021/12/8 23:46:47
本文主要是介绍堆排序-heap sort,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
heap sort
参考链接
满二叉树性质:
parent=(i-1)/2,son_left=i*2+1,son_right=i*2+2
建堆
首先对数组建立大顶堆:父节点一定大于子节点
对每一个非叶节点递归进行比较(堆化)
最后一个非叶节点
结论:最后一个叶节点的父节点
证明:假设最后一个叶节点a的父节点b不是最后一个非叶节点。
那么存在一个下标更大的非叶节点c,其孩子d的下标将大于a的下标,与a是最后一个叶节点矛盾
假设数组长度为n,最后一个节点下标为n-1,其父节点为(n-1-1)/2=n/2-1
排序
迭代n步,每一步将堆顶元素与堆末尾交换。
将堆的长度减少1,并对下标0进行堆化
code
class Solution { public: void max_heapify(vector<int>& arr,int st,int ed) { int dad=st; int son=st*2+1; while(son<ed) { if(son+1<ed&&arr[son+1]>arr[son]) ++son; if(arr[dad]>=arr[son]) return; swap(arr[dad],arr[son]); dad=son; son=dad*2+1; } } void heap_sort(vector<int>& arr) { int n=arr.size(); for(int i=n/2-1;i>=0;--i) max_heapify(arr,i,n); for(int i=n-1;i>0;--i) { swap(arr[0],arr[i]); max_heapify(arr,0,i); } } vector<int> sortArray(vector<int>& nums) { heap_sort(nums); return nums; } };
这篇关于堆排序-heap sort的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-09百万架构师第十二课:源码分析:Spring 源码分析:Spring系统概述及IOC实现原理|JavaGuide
- 2025-01-08如何用关键链方法突破项目管理瓶颈?
- 2025-01-08电商人必看!6 款提升团队协作与客户满意度软件!
- 2025-01-08电商团队管理混乱?快用这 6 款软件优化协作流程!
- 2025-01-08短剧制作效率低?试试这5款任务管理工具
- 2025-01-08高效应对电商高峰,6 款团队协作软件大揭秘!
- 2025-01-08为什么外贸人都爱上了在线协作工具?
- 2025-01-08提升工作效率,从这些任务管理工具开始
- 2025-01-08新年电商订单暴增,必备的 6 款可视化协作办公软件有哪些?
- 2025-01-08短剧制作经理必备技能与工具全解析