堆与堆排序 一、什么是堆 堆其实是一颗完全二叉树,除了树的最后一层不是满的,其他层从左到右都是满的。堆中除叶子节点外每个节点的关键字都大于等于(或小于等于)他的左右孩子的关键字,其中节点的关键字都大于等于左右孩子的关键字的堆称之为“大顶堆”或“最大化堆”,如下图a;节点的关键字都小于等于左右孩子的关 ...
分类:
编程语言 时间:
2017-03-30 17:16:15
阅读次数:
255
基本思想 对于给定的n个记录,初始时把这些记录看做一颗顺序存储的二叉树,然后将其调整为一个大顶堆,然后将堆的最后一个元素与对顶元素进行交换后,堆的最后一个元素即为最大记录;接着将前(n-1)个元素重新调整为一个大顶堆,再将堆顶元素与当前堆的最后一个元素进行交换后得到次大的记录,重复该过程知道调整的堆 ...
分类:
编程语言 时间:
2017-03-28 13:13:04
阅读次数:
216
1.双链表SplDoublyLinkedList 结构如图: 类定义: 测试代码: 2.栈SplStack 结构: 栈继承了双向链表的所有方法 3.队列SplQueue 结构图: 继承了双向链表所有方法 另添加了两个方法 4.堆SplHeap 堆是完全二叉树,且节点值比左右孩子的值大(大顶堆)或者比 ...
分类:
Web程序 时间:
2017-03-13 00:08:42
阅读次数:
244
1:插入排序 - 直接插入排序 基本思想: 将一个数字插入到已排好序的有序表当中,从而得到一个新的更大的有序表, 即将序列的第一个记录看成是一个有序的子序列, 然后将从第二个记录插入, 直至整个序列都有序为止. 如果发现一个和插入元素相等的,我们既可以将元素按照原来的顺序摆放得到稳定排序, 也可以改 ...
分类:
编程语言 时间:
2017-03-09 10:40:03
阅读次数:
165
堆积排序(Heapsort)是指利用堆积树(堆)这种资料结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素。堆排序是不稳定的排序方法,辅助空间为O(1), 最坏时间复杂度为O(nlog2n) ,堆排序的堆序的平均性能较接近于最坏性能。 中心思想是在使用数组存储的完全二叉树内从下往上每 ...
分类:
编程语言 时间:
2017-01-10 21:22:59
阅读次数:
231
「仅为草稿,尚未详解」 堆排序(C语言版) 走进堆排序 什么是堆 堆实质就是一颗完全二叉树,其任何一非叶子节点满足下列性质。 i=1,2,3...n/2 说明: 既然是完全二叉树,我们就可以用数组来表示! 堆根据上面的性质又分为: 从中不难发现,大顶堆从上往下依次键值减小,小顶堆从上向下键值增大。 ...
分类:
编程语言 时间:
2016-12-18 23:09:16
阅读次数:
346
预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于 ...
分类:
编程语言 时间:
2016-12-18 02:09:08
阅读次数:
321
基本过程 1.将无序数组转换为一个大顶堆2.将大顶堆的顶部元素与数组的最后一个元素交换3.将交换后的堆调整为一个大顶堆4.将堆顶与数组倒数第二个元素交换5.重复以上过程,直至堆中只有一个元素 堆排序实际上也是一种选择排序,只是从前面的元素中选取最大元素的方法是使用堆选取,比直接比较选取节省比较次数。 ...
分类:
编程语言 时间:
2016-12-11 23:14:50
阅读次数:
282
首先,看一下堆的定义; n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。 情形1:ki <= k2i 且ki <= k2i+1 (最小化堆或小顶堆) 情形2:ki >= k2i 且ki >= k2i+1 (最大化堆或大顶堆) 其中i=1,2,…,n/2向下取整; 该排序的 ...
分类:
编程语言 时间:
2016-11-24 14:32:40
阅读次数:
157