堆排序
来源:互联网 发布:2007-2008网络流行歌曲 编辑:程序博客网 时间:2024/06/08 00:40
铺垫一下:
首先聊下什么是“堆”,堆其实是一个“完全二叉树”,而且是一个有特殊规则的完全二叉树,可以分为“大顶堆”和“小顶堆”,大顶堆特点是根节点比其左右节点都要大,而小顶堆与其相反。
思路:
首先建立最大堆,然后依次交换根节点与最后一个元素,依次删除最后一个元素,重新建立最大堆。
注意:根节点是从0开始计数。
void swap(int *a,int *b){int t=*a;*a=*b;*b=t;}void PercDown(int A[],int p,int N){//将N个结点以p为根节点的堆调整为最大堆;//此时堆根节点从0开始计数;int parent,child;int X;X=A[p];for(parent=p;(parent*2+1)<N;parent=child){child=parent*2+1;if((child!=N-1)&&A[child]<A[child+1])child++;if(X>=A[child]) break;elseA[parent]=A[child];}A[parent]=X;}void Heap_sort(int A[],int N){int i;for(i=N/2-1;i>=0;i--)PercDown(A,i,N);for(i=N-1;i>=0;i--){swap(&A[0],&A[i]);PercDown(A,0,i);}}
阅读全文
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- [leetcode]: 27. Remove Element
- HTML 引入CSS 三种方式
- window10 tensorflow安装,完整安装,解决一切问题!
- Python datetime数据类型
- mac上svn出现SSL错误的解决方式
- 堆排序
- Ecelipse 显示内存使用情况
- Android填坑之旅(第九篇)代码审查关注什么:性能
- 算法导论程序17-桶排序(Python)
- java 获取前一天的数据
- Linux运维笔记-文档总结-高级网络设置(team,网桥,IPV6)
- MATLAB如何判断是否为多波段影像?
- MES面试问题整理
- JS 判断用户是安卓手机还是IOS手机