堆排序(HeapSort)概念堆在树中是一个完成二叉树
堆分为大顶堆和小顶堆
大顶堆:非叶子结点的值大于或等于其左右孩子结点
小顶堆:非叶子结点的值小于或等于其左右孩子结点
特征:堆的根结点的值肯定是极值堆排序的实现步骤构建完全二叉树
将此完全二叉树调整为堆
根据堆的特性,使..
分类:
编程语言 时间:
2017-10-25 23:36:26
阅读次数:
247
对于n个元素的序列{R0, R1, ... , Rn}当且仅当满足下列关系之一时,称之为堆: (1) Ri <= R2i+1 且 Ri <= R2i+2 (小顶堆) (2) Ri >= R2i+1 且 Ri >= R2i+2 (大顶堆) 堆其实是一个顺序存储的完全二叉树 完全二叉树: 顺序存储: 大 ...
分类:
编程语言 时间:
2017-10-15 19:45:28
阅读次数:
190
不稳定的排序算法:选择排序、快速排序、希尔排序、堆排序 稳定的排序算法:冒泡排序、插入排序、归并排序、基数排序 一、时间复杂度 1、冒泡法: 复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)——这是最原始、最慢的排序算法 2、直接插入排序:O(n*n) 3、选择排序:O(n*n) ...
分类:
编程语言 时间:
2017-10-13 12:27:13
阅读次数:
145
堆排序 Heap Sort 堆排序是一种选择排序,其时间复杂度为O(nlogn)。 堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。 情形1:ki <= k2i 且ki <= k2i+1 (最小化堆或小顶堆) 情形2:ki >= k2i 且ki >= k2i+1 ...
分类:
编程语言 时间:
2017-09-11 22:47:13
阅读次数:
182
堆排序是一种选择排序,其时间复杂度为O(nlogn)。 堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。 情形1:ki <= k2i 且ki <= k2i+1 (最小化堆或小顶堆) 情形2:ki >= k2i 且ki >= k2i+1 (最大化堆或大顶堆) 其中 ...
分类:
编程语言 时间:
2017-08-17 12:43:58
阅读次数:
172
前序遍历:先根节点后左节点再右节点。 序列化:保证每个节点都有左右子节点,没有的用null代替,然后前序遍历 中序遍历:先左节点后根节点再右节点 后续遍历:先左节点后右节点再根节点 重建二叉树:前序+中序 根据前序确定根节点,根据中序确认左右子节点,然后递归 宽度优先遍历:利用队列先进先出 二叉搜索 ...
分类:
其他好文 时间:
2017-07-30 17:13:45
阅读次数:
131
1.高速排序 交换排序有:冒泡(选择)排序和高速排序,冒泡和选择排序的时间复杂度太高,思想非常easy临时不讨论。高速排序基于一种分治的思想,逐步地使得序列有序。 #include <iostream> #include <conio.h> using namespace std; int arrs ...
分类:
编程语言 时间:
2017-07-25 12:36:10
阅读次数:
209
关于二叉树有一点需要注意:二叉树并不是树的一种特殊形式。 二叉树又有几种特殊的形式:二叉排序树(二叉查找树)、最优二叉树(哈弗曼树)、二叉堆(大顶堆,小顶堆)等。斜线是数据结构 二叉排序树(二叉查找树)(BST)它或者是一棵空树;或者是具有下列性质的二叉树:(常用二分查找) 1,若左子树不空,则左子 ...
分类:
其他好文 时间:
2017-07-01 23:22:32
阅读次数:
448
深入理解Java PriorityQueue PriorityQueue 本文github地址 Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度,将让 ...
分类:
编程语言 时间:
2017-06-27 23:40:05
阅读次数:
331
【算法】数学 【题解】 1.平均数:累加前缀和。//听说要向下取整? 2.中位数:双堆法,大于中位数存入小顶堆,小于中位数存入大顶堆,保证小顶堆内数字数量≥大顶堆,奇数则取小堆顶,偶数则取两堆顶/2。 3.方差=(平方的均值)-(均值的平方),即对于a,b,c,s2=(a2+b2+c2)/3-((a ...
分类:
编程语言 时间:
2017-06-20 14:47:37
阅读次数:
201