排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的...
分类:
编程语言 时间:
2015-04-16 21:15:41
阅读次数:
124
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都...
分类:
编程语言 时间:
2015-04-16 13:58:35
阅读次数:
170
准备对能一次读入内存中处理的数据,取前K小,用多种方法进行。设想有:插入排序、折半查找插入排序、链排序、堆排序。顺序查找直接插入:思路:1、对全部数据,依次取值。送到一个队列。2、待判断的数据,在队列中做顺序查找。找到位置则插入。3、当队列满,且待判断的数据大于队列中最大数据,则直接放弃。另,代码中...
分类:
其他好文 时间:
2015-04-15 22:48:56
阅读次数:
161
/* 建议先看堆调整方法,堆调整了解了,整个排序算法就算掌握了 */- (void)viewDidLoad{ [super viewDidLoad]; /* 测试数据 */ NSArray *array=@[@3,@2,@6,@4,@1,@0,@6,...
分类:
编程语言 时间:
2015-04-15 21:18:21
阅读次数:
157
堆排序 1 // 将待排序的最后一个元素current插入大根堆中 2 void insert_heap(int *arr, int current, int low, int high) 3 { 4 //记录low的孩子结点中较大元素的下标,初始化为左孩子 5 int large ...
分类:
编程语言 时间:
2015-04-14 16:23:24
阅读次数:
181
STL中,有很多的排序函数模板供我们调用,省去我们自己编写一些排序过程的麻烦。本文是一篇关于STL中堆排序的一个介绍。 本文涉及的几个函数如下:make_heap(), push_heap(), pop_heap(), is_heap(), sort_heap()。其中make_heap()用于构建...
分类:
其他好文 时间:
2015-04-13 20:26:52
阅读次数:
132
package my0410;public class HeapSort { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated metho...
分类:
编程语言 时间:
2015-04-11 22:21:44
阅读次数:
155
堆排序是非常常用的算法之一,应用包括海量数据筛选、普通排序、笔试面试等,一些优秀的开源软件如libevent,它的定时器管理部分就是用的堆排序,不过做了优化,有点晦涩!
分类:
编程语言 时间:
2015-04-11 19:15:00
阅读次数:
278
这里以小顶堆为例:思路:对于堆排序来说,首先需要做的是要建堆,建堆是一个不断调整堆的过程,能够在线性时间内完成。堆排序的过程1、建堆,建堆是不断调整堆的过程,从len/2处开始调整,一直到第一个节点,此处len是堆中元素的个数。建堆的过程是线性的过程,从len/2到0处一直调用调整堆的过程,相当于o...
分类:
编程语言 时间:
2015-04-10 23:47:55
阅读次数:
175
package Heapsort;public class TestMain { /** * 调整堆 * @param array 数组 * @param i 调整的元素i * @param length 堆元素个数 */ public static void adaptat...
分类:
编程语言 时间:
2015-04-09 23:09:43
阅读次数:
136