如何手写一个堆? 1. 插入一个数 2. 求集合当中的最小值 3. 删除最小值 4. 删除任意一个元素 5. 修改任意一个元素 堆的基本结构。 性质: 堆是一颗完全二叉树。按照序号来的 除了最后一层,其他都是满的 每一个点都是小于等于儿子 存储 用一维数组来存 x的左儿子是2x,x的右儿子是2x+1 ...
分类:
编程语言 时间:
2020-03-15 11:30:27
阅读次数:
60
解题思路: 1、插入排序的特点:从左往右扫描,前段数据非递减,当出现第一个递减的位置,再和原数据比较,此后若数据位置不变,则为插入排序。 2、堆排序的特点:从第2个位置起,一直找到第一个比首位数据大的数据止。 #include <stdio.h> #include <string.h> int Ju ...
分类:
编程语言 时间:
2020-03-13 23:32:22
阅读次数:
145
堆排序是一种树形选择排序,特点:L[1...n]视为一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲与孩子节点的内在关系,在当前无序区中选择关键字(最大或最小)元素。 大顶堆:L(i)>L(2i) && L(i)>L(2I+1) 小顶堆:L(i)<L(2i) && L(i)<L(2I+1) 例: ...
分类:
编程语言 时间:
2020-03-12 10:03:57
阅读次数:
75
对常见排序算法进行总结,下图可做参考: 在介绍排序算法之前先明确几个概念: 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
怎么理解优先队列和堆的关系? 简单来说: 堆排序是一种排序算法,利用堆结构完成排序的功能;优先队列是一种数据结构,它是利用堆来实现。 具体来说,堆排序过程:建堆→堆顶就是最大(或小)值,然后堆顶跟最后一个元素交换→调整堆,反复这个过程,直到堆里面所有元素都交换好; 而优先队列:建堆→堆顶元素就是优先 ...
分类:
其他好文 时间:
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
判断是否是插入排序的部分与 1035 插入与归并一样。 本题主要考察 堆排序的实现。 首先,把所有双亲结点进行向下调整; 然后,重复 n-1 次操作,即 把堆顶元素与待排序区的最后一个元素交换并对堆顶元素向下调整。 1 #include<iostream> 2 #include<algorithm> ...
分类:
其他好文 时间:
2020-03-05 13:11:47
阅读次数:
66
1、堆排序 是指利用 二叉堆 这种数据结构所设计的一种排序算法。堆是一个近似 完全二叉树 的结构,并同时满足 堆积的性质 :即子节点的键值或索引总是小于(或者大于)它的父节点。 完全二叉树的重要性质: 二叉堆分以下两个类型: 1.最大堆:最大堆任何一个父节点的值,都大于等于它左右孩子节点的值。[10 ...
分类:
编程语言 时间:
2020-03-03 22:25:59
阅读次数:
79