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)(最小堆)相关推荐

  1. Java最小堆解决TopK问题

    转载自  Java最小堆解决TopK问题 TopK问题是指从大量数据(源数据)中获取最大(或最小)的K个数据. TopK问题是个很常见的问题:例如学校要从全校学生中找到成绩最高的500名学生,再例如某 ...

  2. java 最小堆_堆排序 最大堆 最小堆 Java 实现

    堆 一点疑惑,堆排序是就地排序,所以空间复杂度是 O(1).但是,比如我有一个数组,建立一个最小堆,然后每次取出最小堆的顶点.建立最小堆需要额外空间? 不深究了,归并排序需要额外空间. 堆是完全二叉树 ...

  3. java 最小堆_Java最小堆实现

    package boke.heap1; /** * 堆结点 * * @since jdk1.5及其以上 * @author 毛正吉 * @version 1.0 * @date 2010.05.24 ...

  4. Java实现最小堆一

    2019独角兽企业重金招聘Python工程师标准>>> Java实现最小堆一 堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左孩子和右孩子节点的值. ...

  5. java队列优先级_优先级队列-Java的PriorityQueue与最小堆有何不同?

    来自Java文档 表示为平衡二进制堆的优先级队列:queue [n]的两个子级是queue [2 * n + 1]和queue [2 *(n + 1)]. 优先级队列由比较器或元素的自然顺序进行排序. ...

  6. 堆之最小堆、最大堆(java实现)

    文章目录 堆 图解 最大堆的api设计 最大堆代码实现 最小代码实现 堆 定义:堆是树型的一对多的数据结构,使用数组实现 对应完全二叉树 每个节点大于等于或者小于等于它的子节点 二叉树: 每个非叶子节 ...

  7. merge k sorted lists java_LeetCode 第23题 Merge k Sorted Lists【分而治之】【最小堆】(Java)...

    这道题的题目是合并k个有序的链表,标定难度为Hard,详细需求: 合并k个有序的链表,返回一个新的有序链表. 例子: Input: 1->4->5, 1->3->4, 2-&g ...

  8. [Leetcode][第632题][JAVA][最小区间][堆][滑动窗口]

    [问题描述][困难] [解答思路] 1. 堆 复杂度 class Solution {public int[] smallestRange(List<List<Integer>> ...

  9. 《徐徐道来话Java》:PriorityQueue和最小堆

    在讲解PriorityQueue之前,需要先熟悉一个有序数据结构:最小堆. 最小堆是一种经过排序的完全二叉树,其中任一非终端节点数值均不大于其左孩子和右孩子节点的值. 可以得出结论,如果一棵二叉树满足 ...

  10. 【Java】用PriorityQueue优先队列实现最小堆和最大堆

    用PriorityQueue优先队列实现最小堆和最大堆 1.写法一:使用lambda写法来构建比较规则 2.写法二:比较器实现 3.泛型为Map,并且需要比较的是哈希表的值 使用写法一: 使用写法二: ...

最新文章

  1. [转] javaweb学习-jstl-c:forEach中 varStatus的属性简介
  2. android ------- TCP/IP
  3. C#实现的一个内存Ini类
  4. 海思Hi3519A 进行4k60 h264编码帧率不足的问题
  5. Avalonia跨平台入门第八篇之控件的拖放
  6. 帆软报表属性设计基础
  7. GDAL\OGR C#中文路径不支持的问题解决方法
  8. linux把profile文件删了怎么办,误删Profile后的处理
  9. Rocketmq中Topic、Tag、GroupName的设计思想
  10. win10系统字体颜色变淡
  11. 使用seafile创建个人云(类似百度云)
  12. mysql 省份名排序,mysql省份表,含行政区划代码、省份名和省份全拼
  13. 使用html表单制作简单网页(加表单详细知识点)
  14. 20.时空跳跃者的魔法
  15. 无刷电机控制基础(1)——结构和驱动电路
  16. 95年有g510台式计算机吗,台式电脑太老了换cpu能行吗?
  17. 缺少链接库 : /bin/ld: cannot find -lxxx
  18. 三分钟看完京东区块链白皮书
  19. 浅谈BIM+智慧工地,拒绝吹嘘,拒绝高大上。
  20. IgH详解十三、igh支持 hot connect

热门文章

  1. linux分区用来支持虚拟内存,Linux分区方案
  2. Latex初学入门记载
  3. 可恨的KYLIN OS:动不动就不支持老机
  4. 真正解决:gpg --verify sig: 无法检查签名:找不到公钥
  5. LanguageTool最简范例代码
  6. Caused by: java.lang.UnsatisfiedLinkError: libjawt.so: 无法打开共享对象文件: 没有那个文件或目录
  7. VirtualBox启动虚拟机出错VT-x disable
  8. No toolchains found in the NDK toolchains folder for ABI with prefix: mips64
  9. LINUX下载编译vorbis
  10. LINUX下载编译x265