
经典算法之堆排序
发布日期:2021-05-06 23:31:24
浏览次数:17
分类:技术文章
本文共 1058 字,大约阅读时间需要 3 分钟。
堆排序
以堆的方式去排序,使最大值位于根节点,之后就缩小尺寸,调整位置。时间复杂度O(n logn),不是很稳定
算法步骤
1.创建一个堆
2.把堆首最大值和堆尾互换位置 3.缩小堆尺寸,调整位置 4.重复…直至堆尺寸为1直接上代码
private int[] heapSort(int[] source) { int[] arr = Arrays.copyOf(source, source.length); int len = arr.length; //创建堆 buildMaxHeap(arr, len); for (int i = len - 1; i > 0; i--) { swap(arr, 0, i); len--; heapify(arr, 0, len); } return arr; }
private void buildMaxHeap(int[] arr, int len) { for (int i = (int) Math.floor(len / 2); i >= 0; i--) { heapify(arr, i, len); } }
private void heapify(int[] arr, int i, int len) { int left = 2 * i + 1; int right = 2 * i + 2; int largest = i; if (left < len && arr[left] > arr[largest]) { largest = left; } if (right < len && arr[right] > arr[largest]) { largest = right; } if (largest != i) { swap(arr, i, largest); heapify(arr, largest, len); } }
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月06日 08时20分10秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
CentOS下Nvidia docker 2.0之安裝教程&踩坑實錄
2019-03-03
H5页面授权获取微信授权(openId,微信nickname等信息)
2019-03-03
SpringBoot的URL是如何拼接的
2019-03-03
2018年年终总结
2019-03-03
解决checkbox未选中不传递value的多种方法
2019-03-03
【pgsql-参数详解1】PostgreSQL默认参数值
2019-03-03
HTTP协议(1)_入门的一些教程和资源
2019-03-03
钉钉登录及常用的URL及IP
2019-03-03
【redis键过期删除策略】很高兴再次认识你
2019-03-03
【工具篇】EasyExcel的应用
2019-03-03
大范围卫星影像快速处理
2019-03-03
监控264后缀文件播放
2019-03-03
动态摇动吊牌自适应网站404页面源码
2019-03-03
炫酷文字消失动画网站404页面源码
2019-03-03
EMLOG模板山河网站主题分享
2019-03-03
2019数字音乐市场年度回顾,QQ音乐全面领先
2019-03-03
花1亿扶持优质红人,如涵推动网红经济出圈之路有何深意?
2019-03-03