博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
堆排序
阅读量:7078 次
发布时间:2019-06-28

本文共 1070 字,大约阅读时间需要 3 分钟。

堆排序

//堆是一棵完全二叉树或近似完全二叉树;若任何一非叶子节点i满足:value[i] <= value[2i+1] && value[i] <= value[2i+2]则称为小顶堆;若任何一非叶子节点i满足:value[i] >= value[2i+1] && value[i] >= value[2i+2]则称为大顶堆;

基本思想:(以大顶堆为例)

堆排序的核心思想是构建大顶堆,然后不断获取根节点(最大元素),重新调整剩余元素为大顶堆,最后就得到有序序列

时间复杂度:O(nlogn)-->O(nlogn)

空间复杂度:O(1)

是否稳定排序:不稳定

//将以startIdx为起始调整位置, length长度范围的数组调整为大顶堆void HeapAdjust(int array[], int startIdx, int length){    int temp = array[startIdx];    int childrenIdx = 2 * startIdx + 1; //startIdx左右孩子分别为2*startIdx+1和2*startIdx+2    while (childrenIdx < length)    {        //childrenIdx+1 < length 保证不会越界        //若左孩子 < 右孩子, 则取右孩子        if (childrenIdx+1 < length && array[childrenIdx] < array[childrenIdx+1])        {            ++childrenIdx;        }        //如果父
<子,则交换 if (temp < array[childrenidx]) { array[startidx]="array[childrenIdx];" array[childrenidx]="temp;" startidx childrenidx="2" * + 1; } else break; }}void heapsort(int array[], int length){ i temp="0;" 建立大顶堆 length 2 - 1是以数组构建完全二叉树(以0为根)的最后一个非叶子节点 下标 for (i="length">
= 0; --i) { HeapAdjust(array, i, length); } for (i = length - 1; i > 0; --i) { //总是把第一个元素和后面的元素进行交换, 因为第一个元素总是最大的 temp = array[i]; array[i] = array[0]; array[0] = temp; //重新调整为大顶堆 HeapAdjust(array, 0, i); }}

 

转载于:https://www.cnblogs.com/RoamSpace/p/5913582.html

你可能感兴趣的文章
异或交换真的比开一个tmp快吗?
查看>>
使用sea.js管理你项目js文件
查看>>
windows device driver 小结感想
查看>>
SQLServer获取临时表列名并判断指定列名是否存在
查看>>
4827 妹子[快速乘法]
查看>>
Ubuntu的一些使用记录
查看>>
DataBase Connection Failed的一点解决办法(PHP项目)
查看>>
SilverLight控件之ContextMenu和RadContextMenu(菜单)
查看>>
css3背景颜色渐变属性 兼容性测试基础环境为:windows系统;IE6.0+, Firefox4.0+, Chrome4.0+, Safari4.0+, Opera15.0+...
查看>>
word怎么删除空白页
查看>>
2017 计蒜之道 初赛 第五场 A. UCloud 机房的网络搭建
查看>>
探索SpringBoot中的SpringMVC
查看>>
memcpy的用法总结
查看>>
HDU 4027 Can you answer these queries?
查看>>
jq购物车结算功能
查看>>
leetcode725
查看>>
Android WebRTC 音视频开发总结(三)-- 信令服务和媒体服务
查看>>
EntityFramework IEnumerable,IQueryable ,Include
查看>>
memtrack: Couldn't load memtrack module (No such file or directory) 的问题解决
查看>>
Visio画图(一):UML用例图
查看>>