对常见排序算法进行总结,下图可做参考: 在介绍排序算法之前先明确几个概念: 1、时间复杂度:从序列的初始状态到最终排序好的结果状态所花费的时间度量,主要取决于变换、移位等操作语句的执行次数。 2、空间复杂度:从序列的初始状态到最终状态所花费的空间开销,即排序过程中所需要开辟的新的内存空间。 3、稳定 ...
分类:
编程语言 时间:
2020-03-11 12:40:11
阅读次数:
71
1.堆排序 堆是一个完全二叉树。 完全二叉树: 二叉树除开最后一层,其他层结点数都达到最大,最后一层的所有结点都集中在左边(左边结点排列满的情况下,右边才能缺失结点)。 大顶堆:根结点为最大值,每个结点的值大于或等于其孩子结点的值。 小顶堆:根结点为最小值,每个结点的值小于或等于其孩子结点的值。 对 ...
分类:
编程语言 时间:
2020-03-10 11:51:47
阅读次数:
80
就是秀一波操作辣 1 #include <iostream> 2 using namespace std; 3 const int N=1e3+20; 4 int ans[N],cnt=1; 5 struct heap{ 6 int a[N],n; 7 int top(){return a[1];} ...
分类:
编程语言 时间:
2020-03-10 11:46:39
阅读次数:
52
堆 优先队列 前置知识:二叉树。 参考资料 暂无 堆就是优先队列,可以用来解决动态区间查询最值问题。 堆就是一个完全二叉树,可以插入节点,删除根节点(也可以删除特定节点)。 为了方便,普通的堆节点 $i$ 的父亲就是 $[i\div2]$ ($[x]$ 表示不超过 $x$ 的最大整数)。 节点 $i ...
分类:
其他好文 时间:
2020-03-08 09:19:45
阅读次数:
60
怎么理解优先队列和堆的关系? 简单来说: 堆排序是一种排序算法,利用堆结构完成排序的功能;优先队列是一种数据结构,它是利用堆来实现。 具体来说,堆排序过程:建堆→堆顶就是最大(或小)值,然后堆顶跟最后一个元素交换→调整堆,反复这个过程,直到堆里面所有元素都交换好; 而优先队列:建堆→堆顶元素就是优先 ...
分类:
其他好文 时间:
2020-03-06 13:18:51
阅读次数:
60
public class SortHeap { public static void sort(int[] data) { // 构建大顶堆 for (int i = (data.length - 2) / 2; i >= 0; i--) { adjustHeap(data, i, data.len ...
分类:
编程语言 时间:
2020-03-06 12:56:17
阅读次数:
70
Given a tree, you are supposed to tell if it is a complete binary tree. Input Specification: Each input file contains one test case. For each case, th ...
分类:
其他好文 时间:
2020-03-05 20:59:24
阅读次数:
115
判断是否是插入排序的部分与 1035 插入与归并一样。 本题主要考察 堆排序的实现。 首先,把所有双亲结点进行向下调整; 然后,重复 n-1 次操作,即 把堆顶元素与待排序区的最后一个元素交换并对堆顶元素向下调整。 1 #include<iostream> 2 #include<algorithm> ...
分类:
其他好文 时间:
2020-03-05 13:11:47
阅读次数:
66
1)二叉树:一个节点两条分支。同理,多叉树一个节点多个分支。 2)满二叉树:二叉树的叶子节点只出现在最底层,最底层排满。 3)完全二叉树:二叉树的叶子节点只出现在最底层和倒数第二层。 4)二叉搜索树:节点按一定顺序排放,如左子节点小于父节点,右子节点大于父节点。 5)平衡二叉树:任何节点的左右子树的 ...
分类:
其他好文 时间:
2020-03-03 23:58:56
阅读次数:
116
1、堆排序 是指利用 二叉堆 这种数据结构所设计的一种排序算法。堆是一个近似 完全二叉树 的结构,并同时满足 堆积的性质 :即子节点的键值或索引总是小于(或者大于)它的父节点。 完全二叉树的重要性质: 二叉堆分以下两个类型: 1.最大堆:最大堆任何一个父节点的值,都大于等于它左右孩子节点的值。[10 ...
分类:
编程语言 时间:
2020-03-03 22:25:59
阅读次数:
79