堆排序算法时间复杂度为 O(nlgn)
堆从结构上讲,应该是一棵完全二叉树。在堆排序中一个很重要的概念是,维持最大堆的特性。最大堆就是每个节点的值比它左右孩子节点都要大。
我们首先将非叶子节点 都维持最大堆的特性一次。就是说保证非叶子节点它的左右孩子都比它的值要小。build_max_heap函数实现
其中,一个很重要的函数是max_heapify,它的功能是控制单个节点,保证它的孩子节点小...
分类:
编程语言 时间:
2016-05-07 08:53:38
阅读次数:
154
STL学习——Priority_queue篇
概述priority_queue是一个拥有权值观念的queue,它允许加入新元素,移除旧元素,审视元素值等功能。因为它是queue,故只允许底端加入元素,顶端取出元素。priorit_queue内元素并非依照被推入的次序排列,而是依照元素权值排列。权值最高者,排在最前面。
实现priority_queue利用max_heap和vector表现的完全二叉树...
分类:
其他好文 时间:
2016-05-07 08:20:59
阅读次数:
132
有K个球从一完整二叉树(fully binary tree,FBT)的树根(root)一个一个往下掉。当这个球遇到非终端节点时,可能往左子树跑,也可能往右子树跑,如此直到这颗球到达终端节点(也就是树叶)为止。至于在非终端节点时球该往左或往右的决定乃是由2个值true,false来控制的。如果这非终端 ...
分类:
其他好文 时间:
2016-05-05 10:56:53
阅读次数:
115
二叉树是我们学习数据结构阶段一个重要的知识点,二叉树又被分为满二叉树,完全二叉树和其它三种来学习,所谓的满二叉树是指我们的二叉树的每一个非叶子节点一定含有左孩子和右孩子,而完全二叉树则是指我们的树的叶子节点必须连续的分布在树的左边。今天,我们来探索一下如何..
分类:
其他好文 时间:
2016-05-05 07:18:44
阅读次数:
240
1.二叉堆1.1二叉堆的定义堆是一个完全二叉树结构(除了最底下一层,其他层全是完全平衡的),如果每个结点都大于它的两个孩子,那么这个堆是有序的。
二叉堆是一组能够用堆有序的完全二叉树排序的元素,并在数组中按照层级存储(不用数组的第一个位置)
1.2二叉堆的性质
最大的元素在a[1] (root结点)
每个k的父亲在k/2
每个k的孩子在k*2和k*2+1
1.3二叉堆的操作1.3...
分类:
编程语言 时间:
2016-04-29 15:35:30
阅读次数:
164
堆数据结构是一种数组对象,它可以被视为一棵完全二叉树结构,所以堆也叫做二叉堆。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于..
分类:
其他好文 时间:
2016-04-29 02:04:34
阅读次数:
320
堆数据结构是一种数组对象,它可以被视为一棵完全二叉树结构。堆结构的二叉树存储:大堆:每个父节点的都大于孩子节点;小堆:每个父节点的都小于孩子节点。建堆:由于堆被视为完全二叉树,故在h-1层找到第一个(从后往前找)非叶子结点,进行堆的下调建大堆时,从下往上依次判..
分类:
其他好文 时间:
2016-04-28 07:08:16
阅读次数:
1382
周数 专业学习目标 专业学习时间 新增代码量 博客发表量 人文方面的学习 知识技能总结 第 九 周 二叉树,哈夫曼树,森林,完全二叉树。 3个小时 60 2 天才在左,疯子在右 链表,顺序表还不是很懂 周数 专业学习目标 专业学习时间 新增代码量 博客发表量 人文方面的学习 知识技能总结 第 九 周 ...
分类:
其他好文 时间:
2016-04-27 18:32:24
阅读次数:
135
一、堆的概念堆数据结构是一种数组对象,它可以被视为一棵完全二叉树结构。堆结构的二叉树存储是:最大堆:每个父节点的都大于孩子节点。最小堆:每个父节点的都小于孩子节点。堆栈中的物体具有一个特性:最后一个放入堆栈中的物体总是被最先拿出来,这个特性通常称为后进先出(..
分类:
其他好文 时间:
2016-04-27 14:18:25
阅读次数:
220
一、选择排序的问题如果有n个数排序,简单排序需要选取一个极值(最大值或者最小值)需要比较n-1次。但是,每一轮比较并没有把以前比较过的结果保存下来,导致下一轮比较的时候会有比较过的数据继续比较大小,这其实影响了效率,做了很多无用功。堆排序是对简单选择排序的改进..
分类:
编程语言 时间:
2016-04-27 07:02:17
阅读次数:
398