P1177 【模板】快速排序 【 堆排序 】 时间复杂度:O(nlogn) PS:OI界的log都是以2为底数 空间复杂度:O(n) [ 代码 ]: #include<bits/stdc++.h> using namespace std; long long n,x,heap_size; int h ...
分类:
编程语言 时间:
2019-04-26 22:25:41
阅读次数:
188
""" 堆是一种完全二叉树,有最大堆和最小堆两种。 最大堆:对于每个非叶子结点V,V的值都比它的两个孩子结点大,称为最大堆特性(heap order property), 最大堆里面的根总是储存最大值,最小值储存在叶子结点。 最小堆:和最大堆相反,每个非叶子结点V,它的两个孩子的值都比V的值大。 "... ...
分类:
编程语言 时间:
2019-04-26 20:45:51
阅读次数:
166
此随笔以最小堆为例,记录一些关于堆的知识点,例如建堆、插入、取min、堆排序... 用结构体把堆封装起来,面向对象? 有时间一定要把传引用,面向对象这些知识点系统的学习一遍 ...
分类:
其他好文 时间:
2019-04-21 14:26:50
阅读次数:
130
一、动图演示 二、思路分析 先来了解下堆的相关概念:堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图: 同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子 该数组从逻辑 ...
分类:
编程语言 时间:
2019-04-20 15:40:51
阅读次数:
185
[toc] 一、定义 前言 ? 顾名思义,快速排序是实践中的一种快速排序算法,在 C++或对Java基本类型的排序中特别有用 。它的平均运行时间是$O(NlogN)$。该算法之所以特别快,主要是由于非常精炼和高度优化的内部循环。它的最坏性能$O(N^2)$。通过将 堆排序 和快速排序的结合,由于堆排 ...
分类:
编程语言 时间:
2019-04-20 12:54:12
阅读次数:
192
#include #include using namespace std; // 将元素i向下调整 void adjust_down(int sz[], int i, int len) { int k; sz[0] = sz[i]; // sz[0]位置暂存 for (k = i sz[k] &&... ...
分类:
编程语言 时间:
2019-04-20 10:08:45
阅读次数:
158
什么是堆? 什么是堆化? 什么是堆排序? 时间复杂度各是多少? 有哪些应用? ...
分类:
编程语言 时间:
2019-04-20 09:51:49
阅读次数:
143
#-*-coding:utf-8-*-#@Time:2019-03-2616:46#@Author:JayceWong#@ProjectName:leetcode#@FileName:sorting.py#@Blog:https://blog.51cto.com/jayce1111#@Github:https://github.com/SysuJayceimportrandomdefquick_so
分类:
编程语言 时间:
2019-04-17 20:50:58
阅读次数:
178
[toc] 一、定义 1.1 堆 ? 此处的堆,指数据结构中的堆。而不是内存中的那种内存堆,内存堆是基于数据结构的一种实现。堆的数据结构是一棵完全二叉树,它有如下特点:(具体参考下文链接) 堆是一棵完全二叉树 它总是最小值在根节点(或最大值在根节点) 它上一层比下一层小(大) 必定有快速删除根节点, ...
分类:
编程语言 时间:
2019-04-15 23:18:05
阅读次数:
246
作者:Tobin 日期:2019/04/13 缘由:看python cookbook时,用到了heapq的库,书中提到,如果仅仅是返回一个数组的最大值,用max就可以了,但是如果返回多个较大或者较小元素用堆,如果返回的个数接近于数组本身的元素个数时,直接用排序即可。那么我在想,为啥返回几个元素的时候 ...
分类:
其他好文 时间:
2019-04-13 17:37:20
阅读次数:
370