Java 树结构实际应用 一(堆排序2秒排完800w数据)


package com.lin.tree_0308; import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date; public class HeapSort { public static void main(String[] args) { // int[] arr = {4, 6, 8, 5, 9};
// 随机生成
int[] arr = new int[80000000];
for(int i = 0; i < 80000000; i++) {
arr[i] =(int)(Math.random()*8000000);
}
Date date1 = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format1 = simpleDateFormat.format(date1);
System.out.println("排序前时间为:" + format1); heapSort(arr); Date date2 = new Date();
String format2= simpleDateFormat.format(date2);
System.out.println("排序后时间为:" + format2);
} // heapSort
public static void heapSort(int[] arr) {
int temp = 0;
// adjustHeap(arr, 1, arr.length);
// System.out.println("第一次:" + Arrays.toString(arr));
//
// adjustHeap(arr, 0, arr.length);
// System.out.println("第二次:" + Arrays.toString(arr));
// 将无序序列建成一个堆,根据升序需求选择大顶堆或小顶堆
for(int j = arr.length/2 -1; j >= 0; j--) {
adjustHeap(arr, j, arr.length);
} // 将堆顶元素与尾元素交换,将最大元素沉到数组尾端
// 重新调整至堆,继续交换,反复操作直至整个序列有序
for(int j = arr.length-1; j > 0; j--) {
temp = arr[j];
arr[j] = arr[0];
arr[0] = temp;
adjustHeap(arr, 0, j);
} } // heap
/**
*
* @Description:
* @author LinZM
* @date 2021-3-11 10:14:16
* @version V1.8
* @param arr 待调整数组
* @param i 表示非叶子节点在数组中的索引
* @param lenght 表示对多少个元素继续调整,逐渐变小
*/
public static void adjustHeap(int[] arr, int i, int length) {
// 先取出当前元素的值
int temp = arr[i];
// j = 2 * i + 1 j是i节点的左节点
for(int j = i * 2 + 1; j < length; j = j * 2 + 1) {
if(j+1 < length && arr[j] < arr[j+1]) {//右子节点大于左子节点
j++;// j指向有子节点
}
if(arr[j] > temp) {// 子节点大于父节点
arr[i] = arr[j];
i = j;
} else {
break;
}
}
arr[i] = temp;
}
}

仅供参考,有错误还请指出!
有什么想法,评论区留言,互相指教指教。
觉得不错的可以点一下右边的推荐哟
Java 树结构实际应用 一(堆排序2秒排完800w数据)的更多相关文章
- 借助 Java 9 Jigsaw,如何在 60 秒内创建 JavaFX HelloWorld 程序?
[编者按]本文作者为 Carl Dea,主要介绍利用 Jigsaw 项目在大约一分钟内编写标准化的"Hello World"消息代码.本文系国内 ITOM 管理平台 OneAPM ...
- Java树结构
今天在项目中,运用到了Java树结构,是在一个查询中,选择树结构例如图片 该结构采用了前段的最新的知识,通过xml结构的数据库,后端Spring的映射实现的. 代码示例: 数据库: <!-- 取 ...
- Java学习-013-文本文件读取实例源代码(两种数据返回格式)
此文源码主要为应用 Java 读取文本文件内容实例的源代码.若有不足之处,敬请大神指正,不胜感激! 1.读取的文本文件内容以一维数组[LinkedList<String>]的形式返回,源代 ...
- sql每五秒插入一条数据 一次插入N条数据
1建立数据表 create table projectManage ( ID int identity primary key not null, projectName )not null, man ...
- mycat->oracle报java.sql.SQLException: 无法从套接字读取更多的数据
今天下午,测试环境清算的时候又出现了之前的一个异常,这次把错误信息全部打出来了,java.sql.SQLException: 无法从套接字读取更多的数据,是使用mycat连接oracle的,如下所示: ...
- Java编程思想(第4版) 中文清晰PDF完整版
Java编程思想(第4版) 中文清晰PDF完整版 [日期:2014-08-11] 来源:Linux社区 作者:Linux [字体:大 中 小] <Java编程思想>这本书赢得了全 ...
- Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲
Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲 Java生鲜电商平台: 微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性, ...
- Java常见排序算法之堆排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- java实现获取当前年月日 小时 分钟 秒 毫秒
java代码实现如下 view source print? /** * 英文简写(默认)如:2010-12-01 */ public static String F ...
随机推荐
- c++ 输出文件夹(不包括子文件夹)中后缀文件
参考:_finddata_t结构体用法 - 麒麒川的博客 - CSDN博客 准备知识部分: MessageBox MessageBox function (winuser.h) | Microsoft ...
- 三、mysql主从复制
1 MySQL 主从复制 1.1 主从复制的含义 在 MySQL 多服务器的架构中,至少要有一个主节点(master),跟主节点相对的,我们把它叫做从节点(slave). 主从复制,就是把主节点的数据 ...
- Volatile如何保证线程可见性之总线锁、缓存一致性协议
基础知识回顾 下图给出了假想机的基本设计.中央处理单元(CPU)是进行算术和逻辑操作的部件,包含了有限数量的存储位置--寄存器(register),一个高频时钟.一个控制单元和一个算术逻辑单元. 时钟 ...
- 白日梦的ES笔记三:万字长文 Elasticsearch基础概念统一扫盲
目录 一.导读 二.彩蛋福利:账号借用 三.ES的Index.Shard及扩容机制 四.ES支持的核心数据类型 4.1.数字类型 4.2.日期类型 4.3.boolean类型 4.4.二进制类型 4. ...
- ARM汇编--汇编中符号和变量
习惯了使用C语言的情况下我发现自己对与汇编程序的符号和变量的理解很不深刻,今天抽空来学学加深理解.以ARM汇编来说,在汇编代码中所有以"."开头的指令都是汇编伪指令,他们不属于AR ...
- markdown & git diff
markdown & git diff "dependencies": { "core-js": "3.6.5", "el ...
- zsh & git alias
zsh & git alias $ code .zshrc $ code .bash_profile $ code ~/.oh-my-zsh # update changes $ source ...
- React tutorial
https://www.algolia.com Build Unique Search ExperiencesHosted Search API that delivers instant and r ...
- 神奇的数学学习网站 All In One
神奇的数学学习网站 All In One magical math websites {{uploading-image-923797.png(uploading...)}} Math is Fun ...
- ES6 & Classes & Interface
ES6 & Classes & Interface what's the difference between javascript Classes & Interface ? ...