堆排序算法原理与实现
来源:互联网 发布:淘宝自动购物 编辑:程序博客网 时间:2024/05/21 15:50
1. 堆
(1)形状:完全二叉树。
节点i : Parent = i/2 ; Left = 2i; Right = 2i + 1
(2)根最大(最小)——大根堆(小根堆),左右子树没有大小关系
2. 算法的思想
(1)由于跟最大(最小),所以每次输出根
(2)在对堆进行调整,
(3)重复(1)(2)知道结束
所以算法的重点就是如何建立堆和怎样高效的调整
3. 调整HeapAdjust
//大根堆//a[0] 不使用void HeapAdjust( int a[], int i, int size ){int l = 2*i;int r = l+1;int max = i;if( i < size/2 ) // leaf不需要调整{//从i, r, l中找到maxif( l<=size && a[l]>max )max = l;if( r<=size && a[r] > max )max = r;if( max != i ){swap( a[i], a[max] );HeapAdjust( a, max, size );}}}
4. 堆的建立
//a[0] 不使用void BuildHeap( int a[], int size ){for(int i = size/2; i>=1; i++ ){HeapAdjust( a, i, size );}}
5. 堆排序
void HeapSort( int a[], int size ){BuildHeap( a, size );for( int i=size; i>=1; i-- ){cout<<a[i]<<" ";swap( a[1], a[i] );HeapAdjust( a, 1, i-1 );}}
6. 算法分析
最好: nlog(n)
最坏:nlog(n)
平均:nlog(n)
空间复杂度:1
稳定性:非
由于建初始堆所需的比较次数较多,所以堆排序不适宜于记录数较少的文件。
堆在获取数据的最大值or最小值比较有优势
===============================================================================
分类
基础排序O(n^2)
高级排序O(nlogn)
交换冒泡排序快排插入插入排序希尔选择选择排序堆排序
- 堆排序算法原理与实现
- 堆排序 原理与实现
- 堆排序算法原理及JAVA实现
- 堆排序原理及算法实现
- 堆排序算法原理及实现
- 算法基础:堆排序原理及其实现
- 堆排序原理计算法实现
- 堆排序原理及算法实现
- 排序算法(三)堆排序原理与实现(小顶堆)
- 堆排序原理及算法实现(最大堆)
- 堆排序原理及算法实现(最大堆)
- 堆排序原理及算法实现(最大堆)
- 堆排序原理及算法实现(最大堆)
- 堆排序原理及算法实现(最大堆)
- 堆排序原理及算法实现(最大堆)
- 堆排序原理及算法实现(最大堆)
- 堆排序原理及算法实现(最大堆)
- 堆排序原理及算法实现(最大堆)
- Xenserver VPS挂起
- sws_scale的技巧
- SetTimer函数和 KillTimer函数
- JS事件委托
- 深入浅出Node.js(三):深入Node.js的模块机制
- 堆排序算法原理与实现
- oracle连接超时自动断开问题
- 数据对齐 & 结构体的大小
- [转]项目经理如何管理项目
- C# DateTime 日期加1天 减一天 加一月 减一月 等方法
- IIS状态代码的含义
- iOS APP的图标尺寸、启动画面尺寸、宣传画面尺寸
- CAST的数据类型转换函数
- 八皇后问题