一、前言 二叉堆是一个特殊的堆,其本质是一棵完全二叉树,可用数组来存储数据,如果根节点在数组的下标位置为1,那么当前节点n的左子节点为2n,有子节点在数组中的下标位置为2n+1。二叉堆类型分为最大堆(大顶堆)和最小堆(小顶堆),其分类是根据父节点和子节点的大小来决定的,在二叉堆中父节点总是大于或等于 ...
分类:
编程语言 时间:
2020-09-16 12:12:33
阅读次数:
31
记录一下自己理解的堆和堆排序吧。 堆是一种类似于完全二叉树的树形结构,对于二叉树中所有非叶子节点,如果根节点的值严格大于其两个儿子的值,则称为 大顶堆,反之称为小顶堆。 堆排序的一般步骤: 首先利用已有的数据构造一个堆,大顶堆增序,小顶堆降序。 将堆顶的元素与堆末元素交换,接着重新调整除去堆末元素的 ...
分类:
编程语言 时间:
2020-06-22 20:59:19
阅读次数:
91
前言 推排序中的小顶堆的建立,需要注意的是,哪怕是相同的数,不同的插入顺序最终建立堆都不一样。 题目 将一系列给定数字插入一个初始为空的小顶堆 。随后对任意给定的下标 ,打印从 到根结点的路径。 输入格式 组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。 ...
分类:
编程语言 时间:
2020-04-19 15:05:09
阅读次数:
184
快速排序 优点: 好写 局部性好 空间复杂度平均为O(logn) 缺点: 不稳定 朴素地选择第一个元素或者最后一个元素容易退化 选择中间的元素不容易退化,但是对特定的序列仍然有可能退化 优势在于局部性原理,相邻几次调整的区间都几乎涉及同一片内存,所以比归并排序以及堆排序更优。 挺好记的。为什么要写 ...
分类:
编程语言 时间:
2020-04-01 09:16:10
阅读次数:
70
什么是堆 堆是一种特殊的树,他满足一下两点要求 堆是一个完全二叉树 堆中每一个节点的值都必须大于等于(或小于等于)其子树中的值 最大堆 最大堆和最小堆是二查堆的两种形式,最大堆和最小堆很相似,所以本文只实现最大堆以及堆排序 最大堆:根节点的键值是所有结点键值中的最大者,且每个结点的值都比孩子结点大 ...
分类:
其他好文 时间:
2019-06-06 23:04:52
阅读次数:
217
[toc] 什么是堆 堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。 通常将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。 堆的存 ...
分类:
编程语言 时间:
2019-03-10 23:30:51
阅读次数:
372
上一篇,我们讲述了一些简单的排序算法,其实说到底,在前端的职业生涯中,不涉及node、不涉及后台的情况下,我目前还真的没想到有哪些地方可以用到这些数据结构和算法,但是我在前面的文章也说过了。或许你用不到,但是,真的,如果你想要在前端领域有一个不错的发展。数据结构和算法一定是你的必修课。它不仅仅让你在 ...
分类:
编程语言 时间:
2018-05-20 00:13:47
阅读次数:
237
event 事件是个很不错的线程同步,以及线程通信的机制,在python的许多源代码中都基于event实现了很多的线程安全,支持并发,线程通信的库 对于优先队列的堆实现,请看《python下实现二叉堆以及堆排序》, python的event请看<python lock, semaphore, eve ...
分类:
编程语言 时间:
2017-10-05 13:08:30
阅读次数:
248
建堆,以及堆排序 代码1: #include<stdio.h> int h[101];//用来存放堆的数组 int n;//用来存储堆中元素的个数,就是堆的大小 //交换函数,用来交换堆中的俩个元素的值 void swap(int x,int y) { int t; t=h[x]; h[x]=h[y ...
分类:
编程语言 时间:
2017-05-02 13:42:42
阅读次数:
180
应用解释:要求找出一组数中的第n大的数字1.快速排序改进-1(快速选择算法)快速选择算法在于排除,因为一次快排之后便可以确定要找的数在那个子区间,然后不断递归知道找到解,如果没有解最终会导致left>right,从而返回-1,代表输入的要找的数比容量要大当然为了简化的话,是一定要进行剪枝,即当输入的数比容量大的时候直接返回error#include"iostream"
#include"cstdi...
分类:
编程语言 时间:
2016-05-12 16:03:38
阅读次数:
204