heapsort(Java)(最小堆)
1 public static void main(String[] args) 2 { 3 Scanner input = new Scanner(System.in); 4 int n = input.nextInt(); 5 int[] a = new int[n]; 6 7 a[0] = 0; //不使用第一个位置 8 for(int i = 1; i < a.length; i++) 9 a[i] = (int)(Math.random() * 100); 10 //System.out.println(Arrays.toString(a)); 11 long start = System.currentTimeMillis(); 12 heapsort(a, a.length - 1); 13 long end = System.currentTimeMillis(); 14 //System.out.println(Arrays.toString(a)); 15 System.out.println(end - start); 16 //10000000个测试数据用时1050ms 100000000个测试数据用时11500ms 17 } 18 19 public void static heapsort(int[] a, int n) 20 { 21 for(int i = n / 2; i >= 1; i--) 22 sink(a, i, n); 23 while(n > 1) 24 { 25 int temp = a[n]; 26 a[n--] = a[1]; 27 a[1] = temp; 28 sink(a, 1, n); 29 } 30 } 31 32 public static void sink(int[] a, int k, int n) //最小堆化 33 { 34 while(k <= n / 2) 35 { 36 int min_index = k * 2; 37 if(min_index + 1 <= n && a[min_index + 1] < a[min_index]) 38 min_index++; 39 if(a[k] > a[min_index]) 40 { 41 int temp = a[k]; 42 a[k] = a[min_index]; 43 a[min_index] = temp; 44 k = min_index; 45 } 46 else 47 break; 48 } 49 }
转载于:https://www.cnblogs.com/Huayra/p/10594744.html
heapsort(Java)(最小堆)相关推荐
- Java最小堆解决TopK问题
转载自 Java最小堆解决TopK问题 TopK问题是指从大量数据(源数据)中获取最大(或最小)的K个数据. TopK问题是个很常见的问题:例如学校要从全校学生中找到成绩最高的500名学生,再例如某 ...
- java 最小堆_堆排序 最大堆 最小堆 Java 实现
堆 一点疑惑,堆排序是就地排序,所以空间复杂度是 O(1).但是,比如我有一个数组,建立一个最小堆,然后每次取出最小堆的顶点.建立最小堆需要额外空间? 不深究了,归并排序需要额外空间. 堆是完全二叉树 ...
- java 最小堆_Java最小堆实现
package boke.heap1; /** * 堆结点 * * @since jdk1.5及其以上 * @author 毛正吉 * @version 1.0 * @date 2010.05.24 ...
- Java实现最小堆一
2019独角兽企业重金招聘Python工程师标准>>> Java实现最小堆一 堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左孩子和右孩子节点的值. ...
- java队列优先级_优先级队列-Java的PriorityQueue与最小堆有何不同?
来自Java文档 表示为平衡二进制堆的优先级队列:queue [n]的两个子级是queue [2 * n + 1]和queue [2 *(n + 1)]. 优先级队列由比较器或元素的自然顺序进行排序. ...
- 堆之最小堆、最大堆(java实现)
文章目录 堆 图解 最大堆的api设计 最大堆代码实现 最小代码实现 堆 定义:堆是树型的一对多的数据结构,使用数组实现 对应完全二叉树 每个节点大于等于或者小于等于它的子节点 二叉树: 每个非叶子节 ...
- merge k sorted lists java_LeetCode 第23题 Merge k Sorted Lists【分而治之】【最小堆】(Java)...
这道题的题目是合并k个有序的链表,标定难度为Hard,详细需求: 合并k个有序的链表,返回一个新的有序链表. 例子: Input: 1->4->5, 1->3->4, 2-&g ...
- [Leetcode][第632题][JAVA][最小区间][堆][滑动窗口]
[问题描述][困难] [解答思路] 1. 堆 复杂度 class Solution {public int[] smallestRange(List<List<Integer>> ...
- 《徐徐道来话Java》:PriorityQueue和最小堆
在讲解PriorityQueue之前,需要先熟悉一个有序数据结构:最小堆. 最小堆是一种经过排序的完全二叉树,其中任一非终端节点数值均不大于其左孩子和右孩子节点的值. 可以得出结论,如果一棵二叉树满足 ...
- 【Java】用PriorityQueue优先队列实现最小堆和最大堆
用PriorityQueue优先队列实现最小堆和最大堆 1.写法一:使用lambda写法来构建比较规则 2.写法二:比较器实现 3.泛型为Map,并且需要比较的是哈希表的值 使用写法一: 使用写法二: ...
最新文章
- [转] javaweb学习-jstl-c:forEach中 varStatus的属性简介
- android ------- TCP/IP
- C#实现的一个内存Ini类
- 海思Hi3519A 进行4k60 h264编码帧率不足的问题
- Avalonia跨平台入门第八篇之控件的拖放
- 帆软报表属性设计基础
- GDAL\OGR C#中文路径不支持的问题解决方法
- linux把profile文件删了怎么办,误删Profile后的处理
- Rocketmq中Topic、Tag、GroupName的设计思想
- win10系统字体颜色变淡
- 使用seafile创建个人云(类似百度云)
- mysql 省份名排序,mysql省份表,含行政区划代码、省份名和省份全拼
- 使用html表单制作简单网页(加表单详细知识点)
- 20.时空跳跃者的魔法
- 无刷电机控制基础(1)——结构和驱动电路
- 95年有g510台式计算机吗,台式电脑太老了换cpu能行吗?
- 缺少链接库 : /bin/ld: cannot find -lxxx
- 三分钟看完京东区块链白皮书
- 浅谈BIM+智慧工地,拒绝吹嘘,拒绝高大上。
- IgH详解十三、igh支持 hot connect
热门文章
- linux分区用来支持虚拟内存,Linux分区方案
- Latex初学入门记载
- 可恨的KYLIN OS:动不动就不支持老机
- 真正解决:gpg --verify sig: 无法检查签名:找不到公钥
- LanguageTool最简范例代码
- Caused by: java.lang.UnsatisfiedLinkError: libjawt.so: 无法打开共享对象文件: 没有那个文件或目录
- VirtualBox启动虚拟机出错VT-x disable
- No toolchains found in the NDK toolchains folder for ABI with prefix: mips64
- LINUX下载编译vorbis
- LINUX下载编译x265