java 实现构造最大堆
来源:互联网 发布:最新java培训视频教程 编辑:程序博客网 时间:2024/05/22 09:07
首先,我们得知道构造一个堆的时间复杂度是O(N),具体理由?
我认为这本书写的很详细,所以我直接拍了下来。。
附带:这本书是算法设计与分析(Python) 程振波老师写的。。。还没发行,,找到不少小BUG。。2333
那么我们直接用代码去实现下
题目是给定数列0 1 2 3 4 5 6 7 8 9求出其堆形状
方法从下往上依次堆化,时间复杂度O(n)
import java.util.ArrayList;import java.util.List;public class MaxHeap { static void maxHeapify(List<Integer> list,int i) { if((i*2+1)<list.size())//存在子节点 { int currectMax=maxChile(list,i);//找到当前节点与子节点中最大的节点 if(list.get(i)<list.get(currectMax))//将当前节点于最大值交换 { int temp=list.get(i); list.set(i,list.get(currectMax)); list.set(currectMax,temp); maxHeapify(list, currectMax);//递归调用,继续处理最大节点,mc } } } static int maxChile(List<Integer> list,int i) { int leftchild=i*2+1,rightchild=i*2+2,largest=i; if(leftchild<list.size()&&list.get(leftchild)>list.get(i)) { largest=leftchild; } if(rightchild<list.size()&&list.get(rightchild)>list.get(largest)) { largest=rightchild; } return largest; } static void buildHeap(List<Integer> list) { int mid=list.size()/2; //得到第一个叶子节点的索引 for(int i=mid;i>=0;i--) { maxHeapify(list,i);//调用堆化函数 } } public static void main(String[] args) { List<Integer> list=new ArrayList(); for(int i=0;i<10;i++) list.add(i); buildHeap(list); String space=""; int temp=(int) (Math.log(10)/Math.log(2)); int end=(int) (temp==Math.pow(2,temp)?temp:Math.pow(2,temp))-1; for(int i=0;i<end;i++) { space+=' '; } System.out.println(space+list.get(0)); for(int k=1,i=1;k<10;i++) { space=space.substring(0,space.length()-2); System.out.print(space); for(int j=1;k<10&&j<=i*2;j++,k++) { System.out.print(list.get(k)+" "); } System.out.println(); } }}
1 0
- java 实现构造最大堆
- Java 实现最大堆
- 最大堆java实现
- java实现最大堆数据结构
- 使用Java实现最大堆
- java实现最大堆及堆排序
- 最大堆的构造
- java实现最大索引堆(最大堆的优化版)
- java实现最大堆及代码测试
- 手写最大堆(Java实现)
- 最大二叉堆的Java实现
- java实现最小堆(通过构造函数构造最小堆,相当于堆排序)
- 最大堆及堆排序的Java实现_world
- 最小堆和最大堆的JAVA实现
- 最大堆实现堆排序
- 最大堆实现堆排序
- 最大堆的实现
- 最大堆的实现
- 从IDC到云端架构迁移之路(GITC2016)
- 分类算法:kNN
- 关于Python操作txt文件的一点尝试
- NDK第一个程序
- 106.实现自定义归属地提示框的拖拽2
- java 实现构造最大堆
- 日志管理
- solr在使用solrj操作中的各个操作大全(在solrcores中测试)(转自:http://blog.csdn.net/a925907195/article/details/42491157)
- 22. Generate Parentheses(第六周)
- github上比较好用的第三方库
- 58到家入驻微信钱包的技术优化
- 自定义滚轮
- 给定K个有序序列,输出合并后有序序列
- 井字棋