堆排序求TopK(java)
更新时间:2023-07-22 05:37:01 阅读量: 实用文档 文档下载
建立一个长度为K的堆,求一组数据中最小的K个数
时间复杂度是O(N*logK)
package com.test;
public class topheap {
//取len个数据中最小的k个元素,维护一个顶元素最大的堆,不用对这个堆排序double heap[];
int k;//top k
int len;//共len个数据
topheap(int kk,int ll)
{
k = kk;
len = ll;
heap = new double[k+1];
}
/*
* 将data[pos]到data[end]的数据建堆
*/
public void toheap(int pos,int end,double h[])
{
int i = pos;
int j=i;
double value = h[i];
while(true)
{
if(2*i>end)
break;
double l = h[2*i];
j = 2*i;
double max = l;
if(2*i+1 <= end)
{
double r = h[2*i+1];
if(l<r)
{
max = r;
j = 2*i+1;
}
}
if(value<h[j])
{
h[i] = h[j];
i = j;
}
建立一个长度为K的堆,求一组数据中最小的K个数
else
{
break;
}
}
h[i] = value;
}
/*
* 将前k个数据建成堆
*/
public void kheap(double data[])
{
if(k>data.length)
{
System.out.println("数组元素个数不足K个");
return ;
}
//将data中的前k个元素建成堆
for(int i=0;i<k;++i)
{
heap[i+1] = data[i];
}
for(int i=k/2;i>0;--i)
{
toheap(i,k,heap);
}
}
/*
* 读入整个数组,求Top K
*/
public void getTopK(double data[])
{
//将前k个数据建堆
kheap(data);
//对K之后的数据依次读入
for(int i=k;i<data.length;++i)
{
getTopKoneByone(data[i]);
}
}
/*
建立一个长度为K的堆,求一组数据中最小的K个数
* 依次读入数据,求Top K
*/
public void getTopKoneByone(double data)
{
//只有在输入数据比堆顶元素小时才更新heap if(data<heap[1])
{
heap[1] = data;
toheap(1,k,heap);
}
}
public static void main(String args[])
{
//double[] data = {2,10,5,7,3,1,7,8};
double data[] = new double[100000];
for(int i=0;i<data.length;++i)
{
data[i] = Math.random()*100000;
}
topheap th = new topheap(10,data.length);
th.getTopK(data);
for(int i=1;i<=th.k;++i)
{
System.out.print(th.heap[i]+" ");
}
System.out.println();
/*//冒泡排序求Top K,可以比较一下
for(int i=data.length-1;i>0;--i)
for(int j=0;j<i;++j)
{
if(data[j]>data[j+1])
{
double t = data[j];
data[j] = data[j+1];
data[j+1] = t;
}
}
for(int i=0;i<th.k;++i)
System.out.println(data[i]);
*/
}
建立一个长度为K的堆,求一组数据中最小的K个数
}
正在阅读:
堆排序求TopK(java)07-22
运动会加油稿(200字)08-01
山东省建筑市场企业诚信档案和评价系统 说明 - 图文12-30
我美丽的老家作文500字07-11
区供销合作社联合社2021年一季度工作总结和下步工作打算08-03
《网络编程与协议分析》课程设计报告05-20
人教版一下6.胖乎乎的小手03-08
旅游景区管理档09-09
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 排序
- TopK
- java
- 2020-2021学年数学高中4人教A版课时作业-1.2.2-同角三角函数的基本关系-含解析-D
- 如何开展实施5S项目活动管理-素养(Shitsuke)的具体实施方法步骤
- 2021年八年级(下册)物理第十一章《功和机械能》测试题
- 会计专业面试一个注意的问题
- 自动化函授本科组态软件期末练习题一(无答案)
- 气压传动基本回路(大题)
- 基于MATLAB/SIMULINK的三相电压型逆变器的快速仿真研究
- 2015年7月浙江电大《工程建设监理概论》机考题库(含答案)
- 医院医疗风险防范及应急预案
- 弹簧管压力表常见故障现象及排除方法
- 壶关县司法局多措并举开展《人民调解法》宣传活动
- 宁波函授本科有哪些专业
- 电机与控制电子教案 6洗衣机电动机及其控制
- 高等数学(下册)期末模拟试卷(八)
- 2011 中国电子元器件行业十强企业
- 重组人干扰素α-2b阴道泡腾胶囊联合聚甲酚磺醛栓治疗宫颈炎的临床观察
- 中央导管相关血流感染预防策略(2014 年版)
- 【2012四川大学,数据结构与算法设计】第4讲 数组和广义表
- 高考英语任务型写作速成兵法
- 学校(幼儿园)保安培训方案