从一批数据中查找前10个最大值。正常的想法是构建一个10个数的数组,轮询查找的数据并与10个数中最小的比较,然后替换。
另一种思路采用大顶堆的方式。但是只用构建10次大顶堆即可。
多次运行程序后的结论:
100000000个数中普通查找速度大概是18秒,而堆方式查找只有13秒,随着数据量的增大,差距会更加明显。
普通排序:
public class NormalSort {
private static int array[] = new int[10000000000];
private static int base[] = new int[10];
public static void main(String[] args) {
init();
long t = System.currentTimeMillis();
sort();
sysout(t);
}
private static void sysout(long t) {
for(int i =0; i < base.length; i ++){
System.out.println(base[i]);
}
System.out.println("cost time =" + (System.currentTimeMillis()-t));
}
private static void init() {
for(int i =0; i < array.length; i++){
array[i] = (int)Math.round(Math.random() * array.length);
}
for(int i =0; i< base.length;i++){
base[i] = array[i];
}
}
private static void sort() {
for(int i =base.length - 1; i < array.length; i++){
long min = base[0];
int index = 0;
for(int j=0; j< base.length; j++){
if(base[j] < min){
index = j;
min = base[j];
}
}
if(array[i] > min){
int tmp = array[i];
array[i] = base[index];
base[index] = tmp;
}
}
}
}
堆排序
public class HeapSort {
private static int array[] = new int[10000000000];
/**
* @param args
*/
public static void main(String[] args) {
init();
long t = System.currentTimeMillis();
sort();
System.out.println("cost time " + (System.currentTimeMillis() - t));
}
private static void init() {
for (int i = 0; i < array.length; i++) {
array[i] = (int)Math.round(Math.random() * array.length);
}
}
private static void adjust(int array[], int i, int length) {
int child;
int temp;
for (temp = array[i]; 2 * i + 1 < length; i = child) {
child = 2 * i + 1;
if (child < length - 1 && array[child + 1] > array[child])
++child;
if (temp < array[child]) {
array[i] = array[child];
array[child] = temp;
} else
break;
}
}
private static void sort() {
for (int i = array.length / 2; i >= 0; --i)
adjust(array, i, array.length);
int tmp;
for (int i = array.length - 1; i >= array.length - 11; --i) {
tmp = array[i];
array[i] = array[0];
array[0] = tmp;
adjust(array, 0, i);
}
for (int i = array.length - 11; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
分享到:
相关推荐
总的来说,这个"大数据开发工具包-插件工具-IDEA2017.3.5的scala插件"为Scala开发者提供了一个高效且功能丰富的开发环境,无论是在大数据项目还是其他Scala应用开发中,都能大幅提升开发者的生产力。
` 这个语句查找产品表中所有价格超过3的id和描述。 c) `select id, description from product order by price desc limit 3;` 这个语句与a)类似,不过它是按价格降序排列的。 d) `select id, description, max...
在当今的数据密集型世界中,大数据存储与管理是至关重要的。本篇内容将深入探讨一种名为“Delta”的技术,它是大数据处理领域的一个创新,特别是在实时分析和数据湖优化方面。Delta 技术的核心在于提供了一种可靠、...
在大数据存储及分层实践中,京东零售海量日志数据处理是一个关键环节,它涉及到数据的收集、存储、处理和分析等多个方面。在这个过程中,京东利用先进的技术和架构来应对大规模的数据挑战,实现高效的数据管理和价值...
Python程序设计是现代信息技术领域中的核心技能之一,尤其在人工智能和大数据分析方面,它的重要性不言而喻。这份“Python程序设计(人工智能、大数据)-期末测试试卷12023-12-17.zip”文件包含了多个学生的名字,...
- **Entry ID**:每个写入BookKeeper的条目都有一个唯一的Entry ID,这使得数据可寻址,方便读取和查找。 4. **性能优化**: - **零拷贝**:BookKeeper支持零拷贝技术,减少了数据在内核空间和用户空间之间的拷贝...
在现代气象业务系统中,大数据处理与存储是关键的一环,尤其在实时预测、气候建模和灾害预警等方面。PostGIS作为一个强大的空间数据库扩展,为处理地理信息系统(GIS)数据提供了高效、灵活的解决方案。本实践案例将...
3. 快速查找:Alluxio使用LRU(Least Recently Used)策略缓存元数据,使得最常访问的元数据保持在内存中,从而减少磁盘I/O,提升查询速度。 三、元数据同步优化 1. 数据局部性:Alluxio强调数据和计算的局部性,...
在大数据存储领域,Hadoop 分布式文件系统(HDFS)是业界广泛应用的基础架构,尤其在快手这样的大型互联网公司中,HDFS的技术演进对于支撑海量数据处理至关重要。本篇内容将深入探讨快手HDFS的技术演进过程,揭示其...
在本实验中,我们使用除留余数法构造哈希函数,即将学生姓名折叠处理后,以余数法将其映射到哈希表的索引上。 哈希函数的设计可以影响哈希表的性能,包括查找速度和冲突率。为了提高哈希表的性能,我们需要选择合适...
MatrixOne 是一款高性能的超融合 HTAP(Hybrid Transactional Analytical Processing)数据库,它集成了事务处理和分析处理的能力,旨在解决大数据场景下的实时分析需求。本篇将重点探讨 MatrixOne 的存储引擎设计,...
在大数据学习之旅中,我们经常会接触到各种数据结构和算法,其中红黑树作为一种自平衡二叉查找树,因其高效的数据操作性能,在很多大型系统中扮演着重要的角色。本主题将聚焦于红黑树的源码解析,以Zookeeper 3.4.7...
### 大数据及其常用组件介绍 #### 一、大数据概览 大数据(Big Data)指的是那些超出常规软件工具处理能力范围的数据集合。这类数据不仅规模庞大、增长迅速,还具有多样化的特点,要求采用新的处理模式来提升决策能力...
在《Redis大数据之路》这本书中,作者唐福林对“大数据”的概念进行了深入的探讨,并将其分为几个不同的层面来理解: 1. **线下大数据 vs 线上大数据**:线下的大数据主要指的是非实时的数据处理和分析,例如历史...
在大数据查找算法中,Bitmap可以用来高效地进行数据过滤和查询,这是因为它的空间效率高,查找速度非常快。 首先,Bitmap的核心在于其数据结构。每个bit对应一个唯一的标识,比如在大数据集中的一个唯一ID。当某个...
《Excel数据可视化方法与应用》是福建师范大学精品大数据导论课程系列的一部分,专注于利用Excel工具进行数据可视化。在大数据时代,数据可视化已经成为理解和解析复杂数据的关键技能,而Excel作为广泛使用的数据...
"大数据风组合图-61-问卷调查设计表-修改.zip"这个文件很可能是一个用于大数据项目的数据采集工具,具体来说,它是一个经过修改的问卷调查设计表格,存储为.xlsx格式,常见于Excel程序中,用于结构化数据的录入和...
本实验是《大数据技术原理与应用》课程中的第一次实践操作,主要目的是帮助学生熟悉并掌握在大数据处理中最基础的操作系统——Linux的基本命令以及Hadoop的基本操作。这些技能对于后续的大数据处理实验至关重要。 #...
在大数据面试中,Java技术是不可或缺的一部分,它涉及到虚拟机、面向对象、多线程、集合框架、反射、内存管理等多个方面。以下是一些相关知识点的详细解释: 1. **HashMap底层原理**:HashMap是基于哈希表实现的,...
在大数据系统与大规模数据分析的课程中,"BDMS:大数据系统与大规模数据分析-2021春-homework"是一个重要的学习环节,其中的"hw1-基于哈希的分组依据"是第一份作业,它主要关注的是数据处理中的哈希技术和分组策略。...