1 维护最大堆性质的过程(MAX-HEAPIFY) 输入数组A和一个下标i。假设以LEFT(i)和RIGHT(i)为根节点二叉树都是最大堆,但是A[i]可能小于左右孩子节点。这时需要通过该过程使得A[i]在最大堆中“逐级下降”,从而使得以下标i为根节点二叉树为最大堆。 伪代码 : MAX-HEAPI ...
分类:
编程语言 时间:
2019-12-09 12:02:27
阅读次数:
104
题目: 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 分析: 最先想到的是将数组升序排列,返回前k个元素。不过排序的话效率可能会较低,我们可以使用优先级队列模拟堆来处理。 模拟一个k个元素的最大堆,当堆内元素个数等于k的时 ...
分类:
编程语言 时间:
2019-11-29 18:33:41
阅读次数:
97
转自:https://www.cnblogs.com/starhu/p/6400348.html?utm_source=itdadao&utm_medium=referral 堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制 ...
分类:
编程语言 时间:
2019-11-23 23:33:12
阅读次数:
83
堆排序 public static void heapSort(int[] arr) { //构建最大堆 heapInsert(arr); int size = arr.length; while (size > 1) { //调整堆顶和堆底的数值 swap(arr, 0, size - 1); s ...
分类:
编程语言 时间:
2019-11-21 13:47:47
阅读次数:
77
十大经典排序算法(python实现)(原创) 使用场景: 1,空间复杂度 越低越好、n值较大: 堆排序 O(nlog2n) O(1) 2,无空间复杂度要求、n值较大: 桶排序 O(n+k) O(n+k) 经典排序算法图解: 经典排序算法的复杂度: 大类一(比较排序法): 1、冒泡排序(Bubble ...
分类:
编程语言 时间:
2019-11-20 21:35:50
阅读次数:
65
题目描述: 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 思路分析: 思路一:排序+遍历,如果是升序,那就是返回nums[n-k],如果是降序,那就是返回nums[k-1] 时间复杂度:O(Nlogn) 空间复杂度:O( ...
分类:
编程语言 时间:
2019-11-20 15:34:02
阅读次数:
81
堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0 ...
分类:
其他好文 时间:
2019-11-17 21:05:02
阅读次数:
85
1. 简介 队列是一种特殊的线性表,它只允许在表的前端(front)进行删除(出队)操作,而在表的后端(rear)进行插入(入队)操作。 栈又名堆栈,它和队列一样也是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。与先进先出队列相比,栈的运作 ...
分类:
其他好文 时间:
2019-11-11 18:42:24
阅读次数:
75
我们可以使用二叉堆数据结构来帮助我们创建一个非常著名的排序算法:堆排序算法。它包含下面三个步骤。 (1) 用数组创建一个最大堆用作源数据。 (2) 在创建最大堆后,最大的值会被存储在堆的第一个位置。我们要将它替换为堆的最后一个值,将堆的大小减1。 (3) 最后,我们将堆的根节点下移并重复步骤2直到堆 ...
分类:
编程语言 时间:
2019-10-27 16:58:16
阅读次数:
97
题目描述 如题,一开始有N个小根堆,每个堆包含且仅包含一个数。接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或第y个数已经被删除或第x和第y个数在用一个堆内,则无视此操作) 操作2: 2 x 输出第x个数所在的堆最小数,并将其删除(若第x个数已经被删除, ...
分类:
其他好文 时间:
2019-10-23 00:36:34
阅读次数:
214