堆排序实现
1、代码如下
package better.amy.sort; /** * 堆排序实现 * * @author zhujinrong * */ public class HeapSort { /** * 构造大堆 大根堆排序的结果是升序 * * @param a * 数组a * @param m * 起始位置 * @param n * 结束位置 */ private static void heapAdjustMax(int a[], int m, int n) { int t = a[m]; for (int i = 2 * m + 1; i <= n; i = 2 * i + 1) { if (i < n && a[i + 1] > a[i]) { i++; } if (t < a[i]) { a[m] = a[i]; m = i; } } a[m] = t; } /** * 升序堆排序 * * @param a * 待排序数组 */ public static void heapSortAsc(int a[]) { if (a == null) { return; } int n = a.length; for (int i = n / 2 - 1; i >= 0; i--) { heapAdjustMax(a, i, n - 1); } for (int i = n - 1; i > 0; i--) { int t = a[i]; a[i] = a[0]; a[0] = t; heapAdjustMax(a, 0, i - 1); } } /** * 从下标m,到n,将其调整为小堆 小根堆排序结果是降序(或者说是非升序) * * @param a * 待排序数组 * @param m * 起始位置 * @param n * 结束位置 */ public static void heapAdjustMin(int[] a, int m, int n) { int t = a[m]; for (int i = 2 * m + 1; i <= n; i = 2 * i + 1) { if (i < n && a[i + 1] < a[i]) { i++; } if (t > a[i]) { a[m] = a[i]; m = i; } } a[m] = t; } /** * 降序堆排序 * * @param a * 待排序数组 */ public static void heapSortDesc(int a[]) { if (a == null) { return; } int n = a.length; for (int i = n / 2 - 1; i >= 0; i--) { heapAdjustMin(a, i, n - 1); } for (int i = n - 1; i > 0; i--) { int t = a[i]; a[i] = a[0]; a[0] = t; heapAdjustMin(a, 0, i - 1); } } }
作者:BestNow
出处:http://www.cnblogs.com/BestNow/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/BestNow/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
分类:
03 算法设计
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?