heapSort_by_Java
2013-06-19 00:40
344 查看
用java 实现的堆排序(heapSort)没有进行防御性编程,仅供实现参考。
说明:由于是对数组进行原地排序,而且对于堆中的非叶子节点a来说,其左孩子的编号为2*a,右孩子的编号为2*a+1,因此对于数组中第0号元素上述公式不在适用,为了方便起见,我将第0号元素设置为-1,仅作为占位符使用,实际排序中不对其进行处理。
说明:由于是对数组进行原地排序,而且对于堆中的非叶子节点a来说,其左孩子的编号为2*a,右孩子的编号为2*a+1,因此对于数组中第0号元素上述公式不在适用,为了方便起见,我将第0号元素设置为-1,仅作为占位符使用,实际排序中不对其进行处理。
public class Heap_Sort { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int[] a={-1,3,5,8,9,6,4,32,21,1}; Heap_Sort hs=new Heap_Sort(); hs.BuildHeap(a); int len=a.length; for(int i=1;i<a.length;i++){ len--; int t=a[1]; a[1]=a[len]; a[len]=t; hs.Modify(a,1,len); } for(int i=a.length-1;i>0;i--){ System.out.println(a[i]); } } private int[] BuildHeap(int[] a){ if(a==null){ return null; }else{ for(int i=(a.length-2)/2;i>0;i--){ //由于堆默认为完全二叉树,因此(a.length-2)/2即为数据a中最后一个非叶子结点; Modify(a,i,a.length); } } return a; } private void Modify(int[]a,int i,int len){ int left=2*i; int right=2*i+1; if(left<len&right<len){ if((a[left]<a[i])&(a[left]<a[right])){ int t=a[i]; a[i]=a[left]; a[left]=t; Modify(a,left,len); }else if((a[i]>a[right])&(a[left]>a[right])){ int t=a[i]; a[i]=a[right]; a[right]=t; Modify(a,right,len); } }else if(left<len){ if(a[i]>a[left]){ int t=a[i]; a[i]=a[left]; a[left]=t; } } } }
相关文章推荐
- heap sort by ruby
- java.sql.SQLException: ORA-04030: 在尝试分配 64528 字节 (sort subheap,sort key)时进程内存不足?
- 堆排序(Heapsort)之Java实现
- Java排序算法--堆排序(HeapSort)
- Map 按值排序 (Map sort by value) - Java
- 堆排序HeapSort(Java)
- 堆排序(Heapsort)之Java实现
- heap sort algorithm 堆排序算法 java实现
- HeapSort堆排序Java实现图文代码详解
- [转载]堆排序(HeapSort) Java实现
- [LeetCode] Sort Characters By Frequency(Java)
- 堆排序Heap Sort——浅显易懂+Java实现
- 堆排序(Heapsort)之Java实现
- Java堆排序(HeapSort)算法实现
- 堆排序(Heap Sort)原理及Java实现
- Java HeapSort
- Caused by: java.lang.OutOfMemoryError: Java heap space 异常
- heap sort java
- heapsort堆排序(3种语言实现 c/java/python)
- hadoop错误-Java heap space at org.apache.hadoop.io.BoundedByteArrayOutputStream