按照算法导论上的实现,不过把下标改成从0开始了。原理:import java.util.Arrays;public class Solution { /** * 每次将堆顶元素交换到最后并从堆中除掉。 * * @param a */ public sta...
分类:
其他好文 时间:
2014-08-14 23:40:16
阅读次数:
228
上一篇完成了堆的建立。在此基础上就可以实现堆排序。思路:在此我们以实现从小到大排序为例。通过第一次的堆建立,生成的大顶堆的根结点值是最大值。然后我们将这个值放到某个地方可以不管它了(实际操作时都是放到整个堆的最后面,然后把最后面那个结点值放到最顶端),此时我们需要操作的元素个数已经少了一个,把剩下的...
分类:
其他好文 时间:
2014-08-14 19:38:49
阅读次数:
192
Problem Description:
Sort a linked list in O(n log n)
time using constant space complexity.
分析:对链表进行排序,思考排序算法时间复杂度为O(nlogn)的只有归并,快排和堆排序,应用到链表上的归并比较合适,这里利用快慢指针找到链表的中间节点,然后分别对两边递归归并排好序后将两边归并即可得到最终...
分类:
其他好文 时间:
2014-08-13 22:25:57
阅读次数:
234
希尔算法简介 常见排序算法一般按平均时间复杂度分为两类:O(n^2):冒泡排序、选择排序、插入排序O(nlogn):归并排序、快速排序、堆排序简单排序时间复杂度一般为O(n^2),如...
分类:
编程语言 时间:
2014-08-13 21:57:07
阅读次数:
271
经典排序算法总结(代码)·冒泡法·快速排序·插入排序·希尔(shell)排序·选择排序·堆排序·归并排序附:排序算法原理:http://zh.wikipedia.org/wiki/Category:%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95flash演示:http://...
分类:
其他好文 时间:
2014-08-13 17:43:06
阅读次数:
257
在面对大数据量的排序时(100W以上量级数据),通常用以下三种的排序方法:快速排序、归并排序,堆排序。在这个量级上,其他冒泡,选择,插入排序等已经根本没法看了,效率极低,跟前面三种排序差了千百倍,因此不作比较。这三种排序的平均时间复杂度均为O(nlogn),快速排序,归并排序在面对基本有序序列排序时...
分类:
编程语言 时间:
2014-08-12 21:36:44
阅读次数:
286
堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先解说下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是全然二叉树或者是近似全然二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)不论什么一个子节点的键值。2.每一个结点的左子树和右...
分类:
其他好文 时间:
2014-08-12 16:28:54
阅读次数:
136
1.小根堆
若根节点存在左子女则根节点的值小于左子女的值;若根节点存在右子女则根节点的值小于右子女的值。
2.大根堆
若根节点存在左子女则根节点的值大于左子女的值;若根节点存在右子女则根节点的值大于右子女的值。
3.结论
(1)堆是一棵完全二叉树(如果公有h层,那么1~h-1层均满,在h层连续缺失若干个右叶子)。
(2)小根堆的根节点的值是最小值,大根堆的根节点的值是最大值。
(3)...
分类:
其他好文 时间:
2014-08-12 13:35:44
阅读次数:
319
1、堆 一棵完全二叉树 大顶堆:所有非叶子节点元素均不小于其左右子树根节点的值 小顶堆:所有非叶子节点元素均不大于其左右子树根节点的值2、 初始化堆 ①一组无序元素R[0, 1, ..., n - 1], 先按照顺序将该组无序元素构造为一棵完全二叉树 ②从该二叉树的第一个非叶子结点开始调整...
分类:
其他好文 时间:
2014-08-12 03:06:43
阅读次数:
259