本文详细阐述了大小堆的创建,堆的插入和删除;为了加深记忆还用堆实现了优先级队列问题,topk问题,堆排序问题(包含原理,思路,代码实现,以及测试用例)。本文在windows平台下vs2008上采用C语言实现。 ...
分类:
其他好文 时间:
2018-02-26 11:29:20
阅读次数:
176
一 堆 堆给人的感觉是一个二叉树,但是其本质是一种数组对象,因为对堆进行操作的时候将堆视为一颗完全二叉树,树种每个节点与数组中的存放该节点值的那个元素对应。所以堆又称为二叉堆,堆与完全二叉树的对应关系如下图所示: 二叉堆可以分为两种形式:最大堆和最小堆。在这两种堆中,结点的值都要满足堆的性质。 在最 ...
分类:
编程语言 时间:
2018-02-23 16:01:48
阅读次数:
210
摘要: 本章先回顾了前面介绍的合并排序、堆排序和快速排序的特点及运行运行时间。合并排序和堆排序在最坏情况下达到O(nlgn),而快速排序最坏情况下达到O(n^2),平均情况下达到O(nlgn),因此合并排序和堆排序是渐进最优的。这些排序在执行过程中各元素的次序基于输入元素间的比较,称这种算法为比较排 ...
分类:
编程语言 时间:
2018-02-23 16:00:03
阅读次数:
187
堆是一种数据结构,最大堆性质:堆中的节点值总是不大于其父节点的值,堆是一颗完全二叉树。 堆排序:利用堆将数组进行排序,堆中的根节点存储的是最大值,由此将队中的值先插入操作,再进行去除最大值放到排序数组中,heapify过程。 最大索引堆:堆中存储的元素是数组的索引 ...
分类:
编程语言 时间:
2018-02-18 21:55:00
阅读次数:
247
图解排序算法(一)之3种简单排序(选择,冒泡,直接插入) 图解排序算法(二)之希尔排序 图解排序算法(三)之堆排序 图解排序算法(四)之归并排序 图解排序算法(五)之快速排序——三数取中法 ...
分类:
编程语言 时间:
2018-02-16 11:14:23
阅读次数:
223
题目链接:最小的K个数 思路:堆排序中每趟可以输出最小元素,所以,借助堆排序可以得到最小的K个数。 步骤: 1 创建无元素的ArrayList对象。 2 如果数组为空或者k不是正整数,则返回指向ArrayList对象的引用。 3 获取数组容量。如果数组容量小于k,则返回指向ArrayList对象的引 ...
分类:
其他好文 时间:
2018-02-13 16:39:19
阅读次数:
172
各种排序算法的稳定性和时间复杂度小结 各种排序算法的稳定性和时间复杂度小结 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。 冒泡排序是稳定的,算法时间复杂度是O(n ^2)。 2.2 选择排序(Selection Sort) 选择排 ...
分类:
编程语言 时间:
2018-02-07 14:42:21
阅读次数:
136
任何比较排序在最好情况下都要经过Ω(nlgn),即比较排序的下界为Ω(nlgn)。 合并排序和堆排序都是渐进最优的。 要突破Ω(nlgn),就要进行非比较排序。计数排序、基数排序和桶排序都有非比较的一些操作来确定排序顺序,它们可以达到线性运行时间。 这三种排序都是以空间换时间。应用的不广,先不细看了 ...
分类:
编程语言 时间:
2018-02-06 01:26:19
阅读次数:
167
堆排序是由1991年的计算机先驱奖获得者、斯坦福大学计算机科学系教授罗伯特.弗洛伊德(Robert W.Floyd)和威廉姆斯(J.Williams)在1964年共同发明了的一种排序算法( Heap Sort ); 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是 ...
分类:
编程语言 时间:
2018-02-05 23:27:10
阅读次数:
259
本文对常见的排序算法进行了总结。 常见排序算法如下: 1. "直接插入排序" 2. "希尔排序" 3. "简单选择排序" 4. "堆排序" 5. "冒泡排序" 6. "快速排序" 7. "归并排序" 8. "基数排序" <! more 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排序算 ...
分类:
编程语言 时间:
2018-02-05 21:50:42
阅读次数:
246