#include using namespace std;void Maxheap(int *a,int i,int heapSize)//最大数调整{ int left=i*2+1;//i的左节点 int right=i*2+2; int largest;//中间变量 if...
分类:
编程语言 时间:
2015-10-07 18:47:38
阅读次数:
204
原文:http://blog.csdn.net/morewindows/article/details/6709644堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树...
分类:
编程语言 时间:
2015-10-04 19:35:40
阅读次数:
300
堆的时间复杂度是建O(n),时间复杂度为堆排序O(NLogN),细节如以下的算法看到:#include using namespace std;void swap(int &i,int &j){ int temp=i; i=j; j=temp;}void shiftDown(int...
分类:
编程语言 时间:
2015-10-04 19:31:58
阅读次数:
162
二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个...
分类:
编程语言 时间:
2015-10-03 21:52:15
阅读次数:
340
首先看一下堆的定义:对于n个元素的序列{k1,k2,k3,……,kn},当且仅当满足下列关系时,称之为堆:K(i) = K(2*i) && K(i) >= K(2*i+1) 此时的堆为大顶堆(i = 1,2,……,n/2(下取整))注意:堆得存储是用一维数组来存储的。若将堆对应的序列看成是一个完.....
分类:
编程语言 时间:
2015-09-27 13:47:07
阅读次数:
224
排序算法七:选择排序之堆排序声明:引用请注明出处http://blog.csdn.net/lg1259156776/引言在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本文将对排序算法做一个全面的梳理,从最简单的“冒泡”到高效的堆排序等。上博文讲述了选择排序中的简单排序算法,本文介绍的堆排序是树性选择排序,采用堆这个数据结构来辅助排序。...
分类:
编程语言 时间:
2015-09-26 12:10:25
阅读次数:
336
排序算法四:交换排序之冒泡排序声明:引用请注明出处http://blog.csdn.net/lg1259156776/引言在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本文将对排序算法做一个全面的梳理,从最简单的“冒泡”到高效的堆排序等。系列博文的前三篇讲述了插入排序的三种不同类型,本文讲述第二大类的排序算法:交换排序,包括冒泡排序和快速排序。...
分类:
编程语言 时间:
2015-09-25 13:21:37
阅读次数:
272
1. 比较排序算法的下界 (1) 比较排序 到目前为止,我们已经介绍了几种能在O(nlgn)时间内排序n个数的算法:归并排序和堆排序达到了最坏情况下的上界;快速排序在平均情况下达到该上界。 如果仔细观察,我们会发现:在排序的最终结果中,各元素之间的次序依赖于它们之间的比较。我们把这类排序算法统称为比...
分类:
编程语言 时间:
2015-09-23 19:25:12
阅读次数:
233
各种排序算法的比较排序方法平均时间最坏情况辅助存储简单排序O(n2)O(n2)O(1)快速排序O(nlogn)O(n2)O(logn)堆排序O(nlogn)O(nlogn)O(1)归并排序O(nlogn)O(nlogn)O(n)基数排序O(d(n+rd))O(d(n+rd))O(rd)快速排序 排....
分类:
编程语言 时间:
2015-09-22 18:37:15
阅读次数:
286