对堆进行排序,利用大堆实现升序,小堆实现降序。例如升序的实现,将较大数据存放在最后面,依次往前存放数据。具体为交换第一个元素和最后一个元素,再将不包含最后一个元素的堆进行下调,使堆保持大堆,将最大数据存放在堆中第一个位置,循环执行上述步骤,直到需要下调的数据个数为0.

void AdjustDown(int *a, size_t root, size_t size)//下调--k为数组下标,size为数组元素个数
{//大堆size_t parent = root;size_t child = parent * 2 + 1;while (child < size){if (child + 1 < size && a[child] < a[child + 1]){++child;}if (a[parent] < a[child]){swap(a[parent], a[child]);parent = child;child = parent * 2 + 1;}else//注意不满足交换条件时跳出本次循环{break;}}
}
void HeapSort(int *a, size_t size)//堆排序--采用快速排序(利用大堆实现升序,小堆实现降序)
{assert(a);for (int i = ((int)size-2)/2; i >= 0; --i)//建堆{AdjustDown(a, i, size);//下调i为堆顶的堆}for (size_t i = 0; i < size; ++i){//由于该堆为大堆,则把第一个元素和最后一个元素进行交换,再进行下调swap(a[0], a[size - 1 - i]);//交换堆顶数据和最后一位的数据,使最后一个元素存放最大(小)数//size-1-i为进行下调的元素个数,每交换一次减1,使最后一个元素不参与下调,下调使堆顶存放size-1-i个数中最大(小)数AdjustDown(a, 0, size - 1 - i);}
}

测试用例如下:

void Test()
{//堆排序int arr[] = { 10, 16, 18, 12, 11, 13, 15, 17, 14, 19 };size_t size = sizeof(arr) / sizeof(arr[0]);HeapSort(arr, size);for (size_t i = 0; i < size; ++i){cout << arr[i] << " ";}cout << endl;
}

转载于:https://blog.51cto.com/luoyafei/1769544

堆排序--采用快速排序(利用大堆实现升序,小堆实现降序)相关推荐

  1. Python 让所有奇数都在偶数前面,而且奇数升序排列,偶数降序排序

    这个问题的要求是: 让所有奇数都在偶数前面,而且奇数升序排列,偶数降序排序,比如说 字符串'1982376455',变成'1355798642' 具体代码: def func1(l):if isins ...

  2. 升序堆和降序堆(优先队列) 洛谷1801

    1 // 洛谷1801 2 // 一个升序堆,一个降序堆 3 // 降序堆维护序列的前i个最小值 4 // 插如元素的时候,如果x小于降序堆最大值,则替换,并将最大值插入升序堆:否则,直接插入升序堆 ...

  3. Mysql中的升序和降序以及一个字段升序和一个字段降序

    [Mysql中的升序和降序以及一个字段升序和一个字段降序](https://www.wuhaiqiao.com/2020/304.html)

  4. python随机产生10个数然后前5个升序后5个降序_编写程序,生成包含 20 个随机数的列表,然后将前 10 个元素升序排列,后 10 个元素降序排列,并输出结果。_学小易找答案...

    [填空题]在 Python3.x 中 input() 函数接收到的用户输入数据一律为 ________ . [填空题]运算符% (可以.不可以)对浮点数进行求余数操作. [简答题]解释 Python ...

  5. mysql按升序创建索引_MySQL 降序索引

    MySQL 降序索引 简介:在本教程中,您将了解MySQL降序索引以及如何利用它来提高查询性能. MySQL降序索引简介 降序索引是以降序存储键值的索引.在MySQL 8.0之前,您可以DESC在索引 ...

  6. Python按元组中第一个字符串升序第二个字符串降序排序

    问题描述:假设有一个列表,里面包含若干元组,每个元组中有两个字符串,现在要求对列表中的元组进行排序,排序规则为:第一个字符串升序,如果第一个字符串相同则按第二个字符串降序. 参考代码: 运行结果: - ...

  7. 【Java Collections类:sort()升序排序、reverse()降序排序、copy()复制、fill()填充题】

    正向排序 使用 Collections 类的静态方法 sort() 可以对集合中的元素进行升序排序.这要求列表中的所有元素都必须实现 Comparable 接口,而且所有元素都必须是使用指定比较器可相 ...

  8. 数据结构 - 有两个链表,第一个升序,第二个降序,合并为一个升序链表(C++)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! #inc ...

  9. 堆排序,为什么升序排列要建大堆,降序排列要建小堆

    堆排序中用到了建立大小堆和向下调整的内容,对这些内容有些不了解的同学可以去补一补专门写堆的博客,方便更好的理解堆排序数据结构之堆(Heap),堆的相关操作,用堆模拟优先级队列. 如果把待排序序列分为未 ...

最新文章

  1. WPF中制作带中国农历的万年历
  2. HDU 1244 DP
  3. qr码是二维码码_如何使用QR码进行有效的营销和推广
  4. linux语言yhq,linux通过docker安装kafka
  5. 王者荣耀4月14日服务器维护,王者荣耀4月14日更新了什么内容?4月14日更新内容介绍...
  6. [poj 3436]最大流+输出结果每条边流量
  7. 组合查询--表单对象转化为json数组
  8. 基本排序算法比较与选择
  9. activitymq 集群构建
  10. 阵列天线方向图乘积定理的Python实现
  11. 谷歌翻译失效,解决网页谷歌翻译的问题-只能解决页面翻译
  12. html+mp4在线播放代码,MP4 - html代码库 - 云代码
  13. vivos9保密柜从哪里进
  14. docker学习笔记2--docker镜像命令
  15. [SQL必知必会] 读书笔记
  16. 鸿蒙没有推出手机的打算,华为:没有推出鸿蒙手机计划,自拍会让人觉得你孤独和失败...
  17. 被IBM推崇的PBC到底是什么?
  18. 宣传单彩页_宣传单彩页设计
  19. 5.26 软件测试之配置管理
  20. DevOps关键能力之持续交付 - 新书预览《加速:精益软件和DevOps的科学》

热门文章

  1. @value 静态变量_C/C++语言中的变量的4种存储类型
  2. 计算机关机键消失了,如何解决Windows7电脑中的关机键不见了
  3. 计算机网络设备配置遇到的问题,网络设备使用与维护
  4. 若依如何解决请求地址存在中文出现异常?
  5. MuiPlayer视频播放组件入门
  6. Git检出指定的目录-稀疏检出
  7. Chrome , Firfox 对应IE fireEvent 的方法
  8. 单点服务器微信公众号,腾讯云联合微信降低开发门槛 微信生态从单点云开发到全面云开发...
  9. Maven 本地仓库访问私服
  10. 前端发送的字符串有大小限制吗_前端经典面试题 30道