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 ...
随机推荐
- Gitlab 快速部署及日常维护 (一)
一.GitLab简介GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务 二.GitLab系统架构git用户的主目录通常是/home/git(~ ...
- html图片占位符插件holder.js
1.下载源码 下载链接:http://www.bootcdn.cn/holder/ 2.在HTML中引入holde.js <script src="holder-js-2.9.4\ho ...
- 【哈希表】leetcode454——四数相加II
编号454:四数相加II 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0. 为 ...
- Google Chrome All In One
Google Chrome All In One Chrome Experiments Chrome 测试版 Chrome 开发者版 Chrome Canary 版 chrome://welcome/ ...
- MBP 2018
MBP 2018 touch pad MacBook Pro 如何调节键盘背光 https://support.apple.com/zh-cn/HT202310 F6 & F5 如何清洁 Ma ...
- Dart DevTools & Flutter
Dart DevTools & Flutter https://flutter.dev/docs/development/tools/devtools/overview https://dar ...
- SVG 2 & SVG & getPointAtLength & getPathSegAtLength
SVG 2 & SVG & getPointAtLength & getPathSegAtLength getPointAtLength SVG 1.x https://dev ...
- 翻译:《实用的Python编程》02_02_Containers
目录 | 上一节 (2.1 数据类型) | 下一节 (2.3 格式化) 2.2 容器 本节讨论列表(list),字典(dict)和集合(set). 概述 通常,程序必须处理许多对象. 股票的投资组合 ...
- SpringBoot整合Mybatis 使用generator自动生成实体类代码、Mapper代码、dao层代码
1.新建一个SpringBoot项目,并引入Mybatis和mybatis-generator相关的依赖. <dependency> <groupId>org.springfr ...
- 【Notes】现代图形学入门_01
跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 计算机图形学概述 计算机图形学是一门将模型转化到屏幕上图 ...