1、堆的定义 堆就是用数组实现的二叉树,所有它没有使用父指针或者子指针。 堆就是利用完全二叉树的结构来维护的一维数组。 创建一个堆除了一个简单的一维数组以外,不需要任何额外的空间。 如果我们不允许使用指针,那么我们怎么知道哪一个节点是父节点,哪一个节点是它的子节点呢?节点在数组中的位置index 和 ...
分类:
编程语言 时间:
2020-06-15 21:13:23
阅读次数:
94
package HeapSort // 使用堆排序查询出找出堆里面最大的数 func HeapSortMax(arr []int, length int) []int { //length := len(arr) if length <= 1 { return arr } depth := leng ...
分类:
编程语言 时间:
2020-06-13 22:58:03
阅读次数:
73
数据结构::堆排序 #include <stdio.h> void swap(int array[],int x,int y){ int key; key=array[x]; array[x]=array[y]; array[y]=key; } //从大到小排序 //void Down(int ar ...
分类:
编程语言 时间:
2020-06-13 17:13:18
阅读次数:
66
官网给的大纲吧,你可以把它当重点复习,但如果你只看大纲内容,你会哭的,因为,超纲非常严重!!!!还有,不要只看天勤或王道的书,很多知识上面没有覆盖到,有时间的话尽量看看课本。 选择题,考的范围很广泛,但知识点考的比较简单,这一部分建议大家要有一个比较全面的复习,题目不难,就怕有的知识点压根儿没见过。 ...
分类:
其他好文 时间:
2020-06-13 15:47:05
阅读次数:
77
时间久了,有些遗忘,回顾记录一下: 快速排序: 顾名思义,对于c++,快速排序历史上一直是实践中已知最快的泛型排序算法,平均运行时间:O(n*logn),最差就是O(n^2)。 STL中的sort用的就是快排,只不过根据数据量级穿插了别的如插入排序,堆排等算法,进行动态调整,使性能达到最优解。一般来 ...
分类:
其他好文 时间:
2020-06-12 14:55:40
阅读次数:
58
堆排序 堆排序的思想是先调用堆的inset方法,再调用堆的remove方法输出。 实现 for (i = 0; i < size; i++) heap.insert(array[i]); for (i = 0; i < size; i++) array[i] = heap.remove(); 效率 ...
分类:
编程语言 时间:
2020-06-12 01:13:05
阅读次数:
59
通过上一节的学习,我们了解到 二叉堆的本质还是一个完全二叉树 无序数组通过构造、通过下沉构造可以构造为最小堆 通过上浮构造可以构造为最大堆 来说今天的堆排序算法之前、首先请和我一起、再次了解一下二叉堆元素的删除 二叉堆删除元素 这里假设我们这里有这样的一个完全二叉树如下: 1、删除顶部1号元素【暂且 ...
分类:
编程语言 时间:
2020-06-03 13:39:39
阅读次数:
67
题目:在一个大文件中有10G个整数,乱序排列,要求找出中位数(内存有2G限制,不能一次全部加装),请写出算法设计思路。 中位数的定义:对于一个排序好的序列,如果数据有奇数个的话,中位数就取中间的一个;如果有偶数个的话,中位数一般取中间两个数的平均值。 解题: 思路一:堆排序(转换为求前5G大的元素) ...
分类:
其他好文 时间:
2020-05-29 17:33:39
阅读次数:
108
由于之前失误 在堆排序中没有列出堆的实现 现在补上 public class MaxHeap { /** 所谓大顶堆 就是每个树的父节点都比其左右子节点大 */ /** * 堆 */ private int[] heap; /** * 界限 */ private final int limit; / ...
分类:
编程语言 时间:
2020-05-26 12:12:54
阅读次数:
73
1、堆的概念 堆排序依赖的数据结构是完全二叉树,要想是完全二叉树,前提必须是二叉树(废话),二叉树就要求父亲结点至多有两个孩子,即可以有一个、两个或者没有孩子。 完全二叉树则是在二叉树的基础上多了一些限制条件,那就是: 1、要么二叉树的每一层都是满的,即除叶子结点之外,其他结点都必须拥有左右孩子; ...
分类:
编程语言 时间:
2020-05-24 21:10:32
阅读次数:
66