序本文主要介绍堆排序算法(HeapSort),堆排序像合并排序而不像插入排序,堆排序的运行时间为O(nlgn);像插入排序而不像合并排序,它是一种原地(in place)排序算法。在任何时候,数组中只有常数个元素存储在输入数组以外,这样,堆排序就把插入排序和合并排序的优点结合起来。
堆排序还引入了另外一种算法设计技术,利用某种数据结构(在此算法中为“堆”)来管理算法执行中的信息。堆数据结构不只在堆...
分类:
编程语言 时间:
2015-06-30 21:59:09
阅读次数:
150
1.时间复杂度
时间复杂度为O(n^2)的排序算法:插入排序、冒泡排序、选择排序
时间复杂度为O(nlogn)的排序算法:堆排序、归并排序、快速排序
希尔排序介于这两者之间
2.算法稳定性
稳定的排序算法:插入排序、冒泡排序、归并排序和基数排序
不稳定的排序算法:选择排序、快速排序、希尔排序、堆排序...
分类:
编程语言 时间:
2015-06-30 00:13:26
阅读次数:
149
堆排序算法是建立在堆这种数据结构的基础上,其实堆听着很高端,其实很简单,就是一个二叉树,但是又特殊条件,就是其父节点比孩子节点都大(或都小)的堆称为最大堆(最小堆),瞬间感觉很简单了,最简单的保存方法就是直接用数组来保存。
给出一组数,我们要使用堆排序,首先需要建堆,但是这一组数首先肯定是不满足上面堆的性质的,所以我们需要调整,让他满足堆得性质,变成一个堆,怎么调整呢?拿最大堆来说,就是对于一个节...
分类:
编程语言 时间:
2015-06-22 22:21:57
阅读次数:
203
章节简述
本章主要介绍堆,用该数据结构解决下面两个重要的问题:
排序,采用堆排序算法对n元数组排序,所花的时间不会超过O(nlogn),而且只需要几个字的额外空间;
优先级队列,堆通过插入新元素和提取最小元素这两种操作来维护元素集合,每个操作所需的时间都为O(logn);
本章采用自底向上的组织结构,从细节开始逐步过渡到正题。
堆数据结构
该部分介绍堆数据结构的设计思想。...
分类:
其他好文 时间:
2015-06-19 18:51:01
阅读次数:
156
Description 编写程序堆排序算法。按照非递减排序,测试数据为整数。Input 第一行是待排序数据元素的个数; 第二行是待排序的数据元素。Output 一趟堆排序的结果。Sample Input1231050 36 41 19 23 4 20 18 12 22Sample Output14 ...
分类:
编程语言 时间:
2015-06-16 16:05:13
阅读次数:
161
堆排序是利用堆积树这种数据结构设计的一种算法。
要学习堆排序,我们首先要了解什么是二叉堆:
二叉堆是完全二叉树这这是近似完全二叉树。二叉堆可分为两种形式:最大堆和最小堆。
最大堆的性质是指某个结点的值至多与起父结点的值一样大,最小堆的性质就是指某个节点的值都大于其父结点的值。下图是一个最大堆和一个最小堆。
在堆排序中我们一般使用最大堆。我们要进行堆排序,首先需要把我们的数组转化成一个最大堆...
分类:
编程语言 时间:
2015-05-10 10:01:00
阅读次数:
170
堆排序是利用堆积树这种数据结构设计的一种算法。
要学习堆排序,我们首先要了解什么是二叉堆:
二叉堆是完全二叉树这这是近似完全二叉树。二叉堆可分为两种形式:最大堆和最小堆。
最大堆的性质是指某个结点的值至多与起父结点的值一样大,最小堆的性质就是指某个节点的值都大于其父结点的值。下图是一个最大堆和一个最小堆。
在堆排序中我们一般使用最大堆。我们要进行堆排序,首先需要把我们的数组转化成一...
分类:
编程语言 时间:
2015-05-10 09:44:24
阅读次数:
133
1.堆排序不仅拥有与归并排序一样的时间复杂度为o(nlgn),而且空间复杂度所占秩序额外的几个元素空间,这个又有插入排序的优势。
2.堆排序分为3部分,第一部分是保持堆的性质的函数MAX_HEAPIFY函数,用于保持堆的性质:父结点的值要大于子节点。
第二部分是创建大根堆的函数,BUILD_MAX_HEAP这个函数从第一...
分类:
编程语言 时间:
2015-05-03 23:45:15
阅读次数:
210
阿里面试中有一道题是这样的: 请用JavaScript语言实现sort排序函数,要求:sort([5,100,6,3,-12])//返回[-12,3,5,6,100],如果你有多种解法,请阐述各种解法的思路及优缺点。(仅需用代码实现一种解法,其它解法用文字阐述思路即可)...
分类:
编程语言 时间:
2015-04-23 19:17:20
阅读次数:
262
本段代码实现了建堆,维护最大堆的性质,堆排序函数,优先队列的相关函数(插入,找最大值,提取出最大值,增加关键值,增加元素),以及相关的测试 1 #include 2 #include 3 #include 4 #define LEFT(i) (2 * i) 5 #define RIG...
分类:
编程语言 时间:
2015-04-06 23:02:56
阅读次数:
193