本文参考文章:http://blog.csdn.net/morewindows/article/details/6709644
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。
二叉堆的定义
二叉堆是完全二叉树或者是近似完全二叉树。
二叉堆满足二个特性:
1.父结点的键值总是大于或...
分类:
编程语言 时间:
2016-05-13 00:35:37
阅读次数:
186
本文介绍几种常见排序算法(选择排序,插入排序,希尔排序,归并排序,快速排序,堆排序),对算法的思路、性质、特点、具体步骤、java实现以及trace图解进行了全面的说明。最后对几种排序算法进行了比较和总结。...
分类:
编程语言 时间:
2016-05-12 22:55:06
阅读次数:
320
用堆排序的方法实现将数组中的数字从小到大排列.
编译器:gcc, 编译环境:32位系统可以正常编译; 如果是64位系统请使用 -m32参数, 或修改宏定义中的汇编代码部分....
分类:
编程语言 时间:
2016-05-12 22:19:35
阅读次数:
185
堆
堆排序和合并排序一样,是一种时间复杂度为O(nlgn)的算法,同时和插入排序一样,是一种就地排序算法(不需要额外的存储空间)。堆排序需要用到一种被称为最大堆的数据结构,与java或者lisp的gc不一样,这里的堆是一种数据结构,他可以被视为一种完全二叉树,即树里面除了最后一层其他层都是填满的。也正是因为这样,树里面每个节点的子女和双亲节点的序号都可以根据当前节点的序号直...
分类:
编程语言 时间:
2016-05-12 20:05:22
阅读次数:
284
应用解释:要求找出一组数中的第n大的数字1.快速排序改进-1(快速选择算法)快速选择算法在于排除,因为一次快排之后便可以确定要找的数在那个子区间,然后不断递归知道找到解,如果没有解最终会导致left>right,从而返回-1,代表输入的要找的数比容量要大当然为了简化的话,是一定要进行剪枝,即当输入的数比容量大的时候直接返回error#include"iostream"
#include"cstdi...
分类:
编程语言 时间:
2016-05-12 16:03:38
阅读次数:
204
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。算法一:插入排序
插入排序示意图插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描...
分类:
编程语言 时间:
2016-05-12 12:01:44
阅读次数:
178
堆排序是一种常见的排序算法,其时间复杂度为O(logN),重要思想为建堆取极值,根据需求进行排序,如下图:值得思考的是,二次建堆的过程中,实际上是没有必要将所有元素都进行下调,只需要将根进行下调:实现代码如下:template<classT>//建立仿函数模板满足排序需求
str..
分类:
编程语言 时间:
2016-05-11 20:14:18
阅读次数:
196
优先级队列优先级队列(priorityqueue)
是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有查找,插入一个新元素,删除。
一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素。对于优先权相同的元素,可按先进先出次序处理或按任..
分类:
其他好文 时间:
2016-05-11 20:12:33
阅读次数:
136
这是笔记; 快速排序的思想:先说一趟划分:一个数组a[0...(length-1)],把数组的第一个元素当作枢轴v(是vlaue,不是下标),将数组中所有比k小的元素都移动到k的左侧,将所有比v大的元素都移动到元素的右边。 我们需要得到一个数组划分后,枢轴v现在的位置下标(这是下一步进行划分的边界) ...
分类:
编程语言 时间:
2016-05-11 19:47:20
阅读次数:
190
堆排序是对简单选择排序算法的一种改进。可以构建大顶堆(每个结点的值都大于等于其左右孩子的值)也可以构建小顶堆(每个结点的值都小于等于其左右孩子的值)。堆排自我感觉代码理解起来还是有点难,主要是如何构建一个新堆以及输出堆顶元素后,怎样调整剩余元素成为一个新堆。 1、堆排代码 2、堆调整代码 堆排测试完 ...
分类:
编程语言 时间:
2016-05-11 16:39:04
阅读次数:
205