Java 堆排序
来源:互联网 发布:二战德国实力 知乎 编辑:程序博客网 时间:2024/06/04 19:46
public class Heap {/** * 根据给定的数组以及 数组的取值范围 lastIndex 构造大顶堆; * 步骤: * 1.从最后一个非叶子节点((lastIndex-1)/2)开始往上遍历所有的非叶子节点((lastIndx-1)/2,.....,0) * 2.对于每一个非叶子节点K * 2.1 判断是否含有孩子节点,并找到比K节点值大的最大的孩子节点(bigger),没有则退出 * 2.2 交换 K 节点 与 bigger 节点的值 * 2.3 K节点变为bigger节点,并返回 2.1 * */public static void buildMaxHeap(int[] data, int lastIndex){for(int i=(lastIndex-1)/2; i>=0; i--){int k=i;/** * 数组的数据[0,1,2,......,lastIndex-1] * */while(k*2+1<lastIndex){//如果当前节点K 节点的的子节点存在存在一个int left = 2*k+1;int right = 2*k+2;int bigger;if(right<lastIndex) //存在右孩子节点bigger = data[left] > data[right] ? left:right;else//只存在左孩子节点bigger = left;if(data[k]>= data[bigger]) //如果两个孩子的值都比父节点的值小,不需要交换,退出break;else{int tep = data[k];data[k] = data[bigger];data[bigger] = tep;k = bigger;}}}}/** * 堆排序 给定数组data[] * int k = data.length * 步骤: * 1.构造大顶堆 * 2.输出第一个元素(最大值) * 3.交换第一元素,最后一个元素 * 4.构造大顶堆的数组范围减 1 ,返回 1 * */public static void HeapSort(int[] data){int k = data.length;int t= k;for(int i=0; i<k;i++){buildMaxHeap(data,t);System.out.print(data[0]+" ");int tep = data[0];data[0] = data[k-i-1];data[k-i-1] = tep;t--;}}public static void main(String[] args){int[] data = {34,21,3,4,5,67,89,90,35};Heap.HeapSort(data);}}
0 0
- java排序 -- 堆排序
- Java堆排序算法
- 堆排序(java)
- Java 堆排序算法
- JAVA 堆排序
- 堆排序Java代码
- java 堆排序
- 堆排序Java实现
- java堆排序
- 堆排序(JAVA)
- 堆排序-java实现
- JAVA堆排序
- java 堆排序
- 堆排序 Java实现
- 堆排序 java
- java 堆排序
- Java堆排序
- java堆排序
- andriod安卓新闻类app页面数据图片缓存
- 黑马程序员-[C语言]学习日记(一)
- osgi7——camel发送rabbitmq
- 使用jquery easyui 对表格中的时间格式化
- Hadoop文件系统元数据fsimage和编辑日志edits
- Java 堆排序
- HDU 5407 CRB and Candies(LCM +最大素因子求逆元)
- IOS常用第三方库
- 富有动感的 Sheet(选择器)
- 数据迁移工具kettle简单上手
- Parallels Desktop 11 for Mac 发布啦!
- C语言多级指针的使用
- 黑马程序员——003——函数、数组
- android 用fragment实现简单菜单点击功能