堆排序,是利用堆结构进行排序,一般是利用最大堆,即根节点比左右两个子树的节点都大,具体算法步骤如下。
一、创建堆
首先将数组中的元素调整成堆,对应下面程序中的createHeap(List list)方法。创建堆就是从树中最后一个内节点(下标为(n-1)/2)开始调整数组中元素的位置,使以这个内节点为根的子树满足堆的结构。即依次将以(n-1)/2、(n-1)/2-1、(n-1)...
分类:
编程语言 时间:
2015-04-09 17:38:23
阅读次数:
332
#include
#include
using namespace std;
template
class MinHeap
{
public:
MinHeap(int sz=DefaultSize)
{
capacity = sz>DefaultSize?sz:DefaultSize;
heap = new Type[capacity];
size = 0;
}
MinHea...
分类:
编程语言 时间:
2015-04-08 18:05:40
阅读次数:
149
1. 堆的概念堆的数据结构是一种数组对象;堆可以视作为一颗完全二叉树(其中,树的每一层都填满,最后一层可能除外);树中每个节点与数组中存放该节点值的元素对应;堆可以划分为两类:a) 最大堆:除了根节点,有A[parent(i)] >= A[i],最大元素即根节点;b) 最小堆:除了根节点,有A[pa...
分类:
编程语言 时间:
2015-04-08 12:22:57
阅读次数:
120
优先队列和堆排序标签(空格分隔): 排序算法 数据结构优先队列和堆排序
优先队列
堆
1 基于堆的算法
初始化
自底向上堆化
自顶向下堆化
插入删除一项
2 堆排序
优先队列全部代码
1 优先队列普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (largest-in,first-...
分类:
编程语言 时间:
2015-04-08 10:59:15
阅读次数:
214
设计模式的一句话 :过分设计是一种罪过,要根据项目实事求是,没有任何一种设计是一步到位,很多功能都是根据反馈进行改善。1、背景:在实际开发中,我们常常遇见实现某种业务功能时,有许多不同实现方式,使用者可以任意选择其中的一种方式。
例如,在排序某个序列数据时,我们可以选择冒泡排序、快速排序、插入排序、堆排序等等。我们在开发过程中,通常会选择
将不同的算法以硬编码的方式封装到一个类当中,当我们需要添...
分类:
其他好文 时间:
2015-04-07 12:02:47
阅读次数:
158
本段代码实现了建堆,维护最大堆的性质,堆排序函数,优先队列的相关函数(插入,找最大值,提取出最大值,增加关键值,增加元素),以及相关的测试 1 #include 2 #include 3 #include 4 #define LEFT(i) (2 * i) 5 #define RIG...
分类:
编程语言 时间:
2015-04-06 23:02:56
阅读次数:
193
1.堆排序a.堆的定义n个元素序列{k1,k2,...,kn}当且仅当满足以下关系时,称之为堆。ki=k2i且ki>=k2i+1 (大根堆)以下针对最大堆b.维护堆的性质Max-Heapify通过让A[i]的值在最大堆中"逐级下降"(A[i]的值小于其左右孩子的值时),从而使得以i为根结点的子树重新...
分类:
编程语言 时间:
2015-04-06 15:34:34
阅读次数:
218
堆排序算法
先看第一个函数HeapAdjust,这个函数功能是在已经是构成堆的二叉树上,如果节点k数据变化了,对节点k进行修正,使之成为一个新的堆二叉树,n为数据长度。
def HeapAdjust(lst,k,n):
while(2*k+1<n):
j=2*k+1
if j+1lst[j+1]:
j=j+1
if...
分类:
编程语言 时间:
2015-04-06 09:01:20
阅读次数:
242
堆堆排序和合并排序一样,是一种时间复杂度为O(nlgn)的算法,同时和插入排序一样,是一种就地排序算法(不需要额外的存储空间)。堆排序需要用到一种被称为最大堆的数据结构,与java或者lisp的gc不一样,这里的堆是一种数据结构,他可以被视为一种完全二叉树,即树里面除了最后一层其他层都是填满的。也正...
分类:
编程语言 时间:
2015-04-05 23:20:28
阅读次数:
237
#include "stdafx.h"void temp(int *l,int i,int j){ l[i]=l[i]^l[j]; l[j]=l[i]^l[j]; l[i]=l[i]^l[j];}//使用异或有个问题,当i和j相等时,不能实现交换的目的void HeapSort_M...
分类:
编程语言 时间:
2015-04-05 23:08:11
阅读次数:
205