博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
堆排序工具类(适用于top k问题,java泛型实现)
阅读量:7212 次
发布时间:2019-06-29

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

代码如下,作用如标题所述

1 public class HeapSort { 2     //方法作用:取出list里面的最小的 k 个值 3     public static 
> List
sort(List
list, int k) throws Exception { 4 if (k <= 0) { 5 throw new Exception("k 必须大于0"); 6 } 7 if (list.size() < k) { 8 throw new Exception("list 长度必须大于k"); 9 }10 List
heapList = new ArrayList
(k);11 for (int i = 0; i < k; i ++) {12 heapList.add(list.get(i));13 }14 initialHeap(heapList);15 for (int i = k; i < list.size(); i ++) {16 if (list.get(i).compareTo(heapList.get(0)) < 0) {17 heapList.set(0, list.get(i));18 heapify(heapList, k, 0);19 }20 }21 return heapList;22 }23 private static
> void initialHeap(List
list) {24 int n = list.size();25 // Build heap (rearrange array)26 for (int i = n / 2 - 1; i >= 0; i--)27 heapify(list, n, i);28 }29 private static
> void heapify(List
list, int n, int i)30 {31 int largest = i; // Initialize largest as root32 int l = 2*i + 1; // left = 2*i + 133 int r = 2*i + 2; // right = 2*i + 234 35 // If left child is larger than root36 if (l < n && (list.get(l).compareTo(list.get(largest)) > 0))37 largest = l;38 39 // If right child is larger than largest so far40 if (r < n && (list.get(r).compareTo(list.get(largest)) > 0))41 largest = r;42 43 // If largest is not root44 if (largest != i)45 {46 T swap = list.get(i);47 list.set(i, list.get(largest));48 list.set(largest, swap);49 // Recursively heapify the affected sub-tree50 heapify(list, n, largest);51 }52 }53 }

 

转载于:https://www.cnblogs.com/Michaelwjw/p/6711115.html

你可能感兴趣的文章
5.6. Spring boot with Logging
查看>>
MySQL 视图技术
查看>>
第 138 章 Spark
查看>>
flask 使用 SQLAlchemy 的两种方式
查看>>
Nginx入门笔记之————配置文件结构
查看>>
SQL Server-聚焦深入理解死锁以及避免死锁建议(三十三)
查看>>
Android(Linux)实时监控串口数据
查看>>
Open Sans字体兼容问题解决办法[font-face]
查看>>
现在的我为什么不泡技术论坛了
查看>>
AES加密
查看>>
MPLS LDP随堂笔记1
查看>>
HTTPS 也不安全?被发现新漏洞会暴露你的数据
查看>>
MySQL · 最佳实践 · 什么时候该升级内存规格
查看>>
花卉世界大观园和杂技之游
查看>>
安全问题会对网络购物季产生负面影响吗
查看>>
2016年日本信息安全市场规模分析
查看>>
微软:超过96%的企业用户正在测试Win10
查看>>
Google VC投资SDN初创公司Plexxi
查看>>
英特尔在移动市场另辟蹊径
查看>>
英特尔收购Movidius背后:为什么我们需要一款专门的CV处理芯片?
查看>>