算法:从最后一颗子树开始从后往前调整,每次调整从上到下,调整为大根堆

为什么从后往前调整,每次调整从上到下?因为如果后前往后调整,那么下面较大的数字永远都不会调整到前面,也就无法调整为大根堆

为什么调整成大根堆?因为每次调整完以后,根就是所有数据中最大的,然后将根和待排序序列的最后一个元素进行交换,最终就完全有序了

如果让求第一大的数、第二大的数,那么就可以使用堆排序

时间复杂度O(nlogn),空间复杂度O(1),不稳定

一次堆排序HeapAdjust的时间复杂度为O(logn),一共需要排序
n次

void HeapAdjust(vector<int>& vec,int start,int end)
{   int tmp = vec[start];for (int i = start * 2 + 1; i <= end; i=i*2+1){if (i<end && vec[i]<vec[i+1]){++i;}if (vec[i] > tmp){vec[start] = vec[i];start = i;}}vec[start] = tmp;
}
void HeapSort(vector<int>& vec)
{int len = vec.size();int tmp;for (int i = (len - 1 - 1) / 2; i >= 0; --i){HeapAdjust(std::ref(vec), i, len - 1);}for (int i = 0; i < len - 1; ++i){tmp = vec[0];vec[0] = vec[len - 1 - i];vec[len - 1 - i] = tmp;HeapAdjust(std::ref(vec), 0, len - 1 - i - 1);}
}
int main()
{vector<int> vec{ 12,89,67,23,34,78,56,45,100,90 };HeapSort(std::ref(vec));for (auto& x : vec){cout << x << endl;}return 0;
}

314-Leetcode 堆排序相关推荐

  1. [leetcode]堆排序 求前k大的数

    前一篇博客中写到了排序算法,其中包含一个堆排序,因此本篇博客讲解堆这个数据结构及其应用. 关于最大堆最小堆以及初始建堆和整理堆在上篇博客中有提及,此处不再赘述.下面讲解一个堆的重要应用,求n个数中前k ...

  2. [LeetCode周赛复盘] 第 314 场周赛20221009

    [LeetCode周赛复盘] 第 314 场周赛20221009 一.本周周赛总结 二. [Easy] 6201. 找出前缀异或的原始数组 1. 题目描述 2. 思路分析 3. 代码实现 三.[Eas ...

  3. LeetCode——Weekly Contest 314

    LeetCode周赛第314场记录 2432. 处理用时最长的那个任务的员工 周赛第一题,根据题意写出代码即可.首先根据logs计算出每项工作的实际用时,然后根据用时长短对员工的ID号进行排序即可.给 ...

  4. AcWing周赛 72 场 LeetCode单周赛 314 场 总结

    一.LeetCode单周赛 314 场 1.6200.处理用时最长的那个任务的员工 (1)原题链接:力扣https://leetcode.cn/problems/the-employee-that-w ...

  5. Acwing第72场周赛+Leetcode第314场周赛

    Acwing第72场周赛 第一题:AcWing 4624. 最小值 分析:向下取整可以用到math.h头文件中的floor()函数,最后输出时套用两个min()函数求三个数的最小值即可. 代码: #i ...

  6. LeetCode 314. 二叉树的垂直遍历(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 1. 题目 给定一个二叉树,返回其结点 垂直方向(从上到下,逐列)遍历的值. 如果两个结点在同一行和列,那么顺序则为 从左到右. 示例 ...

  7. leetcode 215. 数组中的第 K个最 大的元素(堆排序,C语言)

    数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素 快速排序 int cmp(const void* a, const void* b) {return *(int*)b - *(int*) ...

  8. ​LeetCode刷题实战314:二叉树的竖直遍历

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  9. Leetcode第314场周赛

    题目链接 竞赛 - 力扣 (LeetCode) 题目解析 A.6200. 处理用时最长的那个任务的员工 AC代码 class Solution {public:int hardestWorker(in ...

  10. Leetcode - 347. Top K Frequent Elements(堆排序)

    Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nums = [ ...

最新文章

  1. python sched_python事件调度库sched
  2. mysql查看比较大的数据表_mysql 如何查看哪些表数据量比较大
  3. iOS中MVC设计模式
  4. HTMLTestRunner 为什么用PyCharm(Eclipse)执行测试成功但无法生成报告
  5. 深入剖析js命名空间函数namespace
  6. notepad json格式化插件_Prettier + ESLint VSCode 插件配置指南
  7. 客座编辑:李建平(1976-),男,博士,中国科学院科技战略研究院系统分析与管理所研究员、所长...
  8. 《OCA认证考试指南(1Z0-061):Oracle Database 12c SQL基础》
  9. 使用字符串格式化函数
  10. 怎么用python画sin函数图像_用python画三角函数
  11. 网络编程 :System.Net概述(1)
  12. 回顾来路,不忘初心;心之所向,砥砺前行
  13. USB接口,MicroUSB接口
  14. cesium分屏对比
  15. SQL Server2008函数大全
  16. 教你如何把M3U8转换成MP4丨NueXini M3U8 Downloader
  17. java多线程贪吃蛇实验报告_JAVA开放性实验报告贪吃蛇
  18. 详解Gem5模拟器的4种CPU模型
  19. 苹果手机用户流失严重,竟是因为这个原因?
  20. SQL将Json字符串转为表格

热门文章

  1. Centos8安装vsftpd
  2. 经纬度计算他们距离的算法(!!!!!!!!!求助啊)
  3. .net Core 2.1 在 CentOS7下,运行含图片处理时发生异常,报The type initializer for ‘Gdip‘ threw an exception.异常
  4. 几个摄像头和雷达融合的目标检测方法
  5. 转载“我为什么要进国企”
  6. 基于深度学习的图像语义编辑
  7. 【已解决】谷歌浏览器使用上传插件Uploadify的上传按钮不显示
  8. 【指针训练——八道题】
  9. Python爬虫入门——2. 2爬取酷狗音乐top1-500歌曲信息
  10. python工匠技巧系列(给变量注明类型)