优先队列我们在之前讲过的《堆的基础知识》和《堆排序》之后,我们来讲讲最大堆和最小堆的具体应用优先队列!优先队列基础知识我们来看看这样的场景,给定你一组数据,要你在这组数据里面找到最大的那个数据,你要怎么做?
你可能会说直接遍历一次就行啦,运行时间也就O(n)O(n),但是如果要求你在这堆数据里面找到最大的,然后删除,再在剩下的元素里面找到最大的,那还是要遍历一般所有数据。那有没有其他快速的方法呢?...
分类:
其他好文 时间:
2015-05-07 22:12:26
阅读次数:
204
选择排序的基本运算都是在n个元素组成的序列中,选择一个关键字最大或最小的元素输出,然后再从剩余的n-1个元素中选择一个关键字最大或最小的元素输出,以此类推,直到排序结束。以递增排序为例,简单选择排序过程如下:1第一次在数组中查找最小值a[i],然后将a[i]和a[0]交换位置。 2从a[1]开始,同样从a[1]开始往后找到最小值a[j],然后与a[1]交换位置,依次类推。废话不多说,直接贴代码
...
分类:
编程语言 时间:
2015-05-07 14:37:43
阅读次数:
127
1.堆的概念
参考:http://www.cnblogs.com/luchen927/archive/2012/03/08/2381446.html
堆(heap),一种数据结构,堆分为最大堆和最小堆,其实就是完全二叉树。最大堆要求节点的元素都要大于其孩子,最小堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求,其实很好理解。有了上面的定义,我们可以得知,处于最大堆的根节点的元...
分类:
编程语言 时间:
2015-05-07 12:30:53
阅读次数:
137
堆排序 堆排序是利用堆的性质进行的一种选择排序。以下先讨论一下堆。1.堆堆实际上是一棵全然二叉树,其不论什么一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即不论什么一非叶节点的keyword不大于或者不小于其左右孩子节点的keyword。 堆分为大顶堆和小顶...
分类:
编程语言 时间:
2015-05-07 10:25:21
阅读次数:
153
堆排序的原理: 构建并且维持一个最大堆,然后交换堆的第一个和最后一个元素,每次交换后最大的元素都被移到最后。然后堆的规模减一,继续交换,直到进行到第二个元素。这时排序完成 图解:(图片来源于http://blog.163.com/zhoumhan_0351/blog/static/399542272...
分类:
编程语言 时间:
2015-05-06 21:01:30
阅读次数:
241
堆排序堆的基础知识我们已经在《堆的基础知识》:http://blog.csdn.net/ii1245712564/article/details/45505799里面介绍过了,这次我们将介绍堆的用途之一:堆排序在诸多的排序算法里面里面,堆排序算是比较快速的了,排序时间消耗为:O(nlogn)O(nlogn),虽然相对于快速排序来说慢了一点点,但是就对于堆的特有性质而言(最大堆堆顶元素为最大元素,最小...
分类:
编程语言 时间:
2015-05-06 15:14:55
阅读次数:
136
根据带排序数据是否全部放入内存,排序分为内排序和外排序。
下面就根据我看书的体会,主要分析内排序的性能。
内排序的种类:插入排序(直接插入排序,希尔排序),选择排序(简单选择排序、堆排序),交换排序(冒泡排序、快速排序),归并排序。
其中用的比较多的是插入排序、归并排序、快速排序。
排序算法的比较:性能的比较可以从以下5个方面进行分析:时间复杂度(平均情况、最好情况、最差情...
分类:
编程语言 时间:
2015-05-06 10:58:22
阅读次数:
150
一.堆的介绍
堆有如下特点的二叉树:
1.他是完全的二叉树。也就是说,除了树的最后一层布需要时满的,其他的每一层从左到右都是满的.(如下图的完全二叉树跟不完全二叉树)
2.它常常用一个数组在实现。(如下图显示了堆它与数组之间的关系。堆在存储器中的表示是数组;堆只是概念上的表示。注意树是完全二叉树,...
分类:
编程语言 时间:
2015-05-05 21:46:49
阅读次数:
195
基本思想编辑选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待...
分类:
编程语言 时间:
2015-05-05 21:08:21
阅读次数:
159
基本思想:
基本思想主要就是两点:构建初始化堆和排序。
以构建最大堆为例,可以分为以下几个步骤:
1、将初始待排序序列(R0,R1,R2....Rn-1)构建成最大堆,此堆为初始的无序堆。
2、将堆顶元素R0与最后一个元素Rn-1交换,此时得到一个新的无序序列(R0,R1,R2....Rn-2)和新的有序序列Rn-1,且满足R[0,2...n-2]
3、由于交换后新的堆顶R0可能违反最大...
分类:
编程语言 时间:
2015-05-05 19:50:19
阅读次数:
171