java实现堆排序
2014-11-14 22:07
260 查看
package com.algorithm.tree; import java.util.Arrays; public class Heap<T extends Comparable> { private T[] heap; private int size; private T[] sortedArray; public Heap(T[] heap){ /*建大顶堆*/ this.heap=heap; size=heap.length; for(int i=size/2;i>=0;i--){ /*size/2 是第一个叶子节点的位置*/ heapAdjust(i,size); } } public void heapAdjust(int begin,int size){ /*begin表示要调整的子树在数组中的起始位置,size表示整个堆的大小*/ int max=begin; if((2*begin+1<size)&&(heap[max].compareTo(heap[2*begin+1])<0)) max=2*begin+1; if((2*begin+2<size)&&(heap[max].compareTo(heap[2*begin+2])<0)) max=2*begin+2; if(max!=begin){ T tempt; tempt=heap[begin]; heap[begin]=heap[max]; heap[max]=tempt; heapAdjust(max,size); } } public void heapSort(){ for(int i=size-1;i>0;i--){ T tempt; tempt=heap[0]; heap[0]=heap[i]; heap[i]=tempt; heapAdjust(0,i); } sortedArray=heap; } public T[] getSortedArray() { return sortedArray; } public static void main(String[] args) { // TODO Auto-generated method stub Integer[] heap=new Integer[]{-8,0,9,8,7,6,10,4,3,2,1}; Heap<Integer> h=new Heap<>(heap); System.out.println("初始堆:"); System.out.println(Arrays.toString(heap)); h.heapSort(); System.out.println("排序后"); System.out.println(Arrays.toString(h.getSortedArray())); } }
输出结果:
初始堆:
[10, 8, 9, 4, 7, 6, -8, 0, 3, 2, 1]
排序后
[-8, 0, 1, 2, 3, 4, 6, 7, 8, 9, 10]
相关文章推荐
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 自主实现的Java实现的构造大小堆、堆排序的算法
- 堆排序详解以及java实现
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 最大堆及堆排序的Java实现_world
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- [原]堆排序的java实现
- [转载]堆排序(HeapSort) Java实现
- 【转】排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- java 实现堆排序
- 算法导论Java实现-堆排序(6.4章节)
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 堆排序(java实现)
- 【转】排序算法复习(Java实现) (二): 归并排序,堆排序,桶式排序,基数排序
- Java实现快速排序、归并排序、堆排序
- 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)
- heapsort堆排序(3种语言实现 c/java/python)
- 堆排序及其JAVA实现