Java 堆排序
2015-08-21 14:12
375 查看
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); } }
相关文章推荐
- 基于Spring可扩展Schema提供自定义配置支持(spring配置文件中 配置标签支持)
- Spring 3 JavaConfig @Import example
- Java线程池的那些事
- Spring 3 JavaConfig example
- spring mvc 在页面中展示图片
- Java基础 笔记(七)
- Spring 3 hello world example
- springmvc项目jsp页面传递参数至controller中文乱码解决方案
- Maven + Spring hello world example
- Eclipse下maven项目报错org.springframework.web.context.ContextLoaderListener解决方案
- Spring注解@RequestMapping请求路径映射问题
- 华为地铁换乘 Java
- Spring整合mongdb
- Java基础 笔记(六)
- jedisCluster整合spring 的配置说明
- JAVA获取随机数
- eclipse 下载及其配置 已经配置黑色主题
- Java TimerTask示例,start,cancel,strat,启动,取消,再启动
- 【原】让代码轻盈地飞舞——IDEA13最实用的功能,全面提升开发效率(桌面java项目开发实战)持续更新中
- myeclipse新建webservice