java堆排序工具包_[Java教程]堆排序工具类(适用于top k问题,java泛型实现)

[Java教程]堆排序工具类(适用于top k问题,java泛型实现)

0

2017-04-15 00:00:31

代码如下,作用如标题所述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 }

本文网址:http://www.shaoqun.com/a/307163.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

JAVA

0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值