堆排序的java实现
2017-11-10 09:50
351 查看
public class MaxHeap { private Integer[] data; private int count; private int capacity; public MaxHeap(int capacity){ data = new Integer[capacity+1]; count = 0; this.capacity = capacity; } public MaxHeap(Integer[] arr){ int n = arr.length; data = new Integer[n+1]; capacity = n; for(int i=0;i<data.length;i++) data[i+1] = arr[i]; count = n; } public MaxHeap(Integer[] arr,int n){ data = new Integer[n+1]; capacity = n; for(int i=0;i<n;i++){ data[i+1] = arr[i]; } count = n; for(int i=count/2;i>=1;i--){ shifDown(i); } } public int size(){ return count; } public boolean isEmpty(){ return count == 0; } /** * 向堆中添加一个元素 * @param data */ public void insert(Integer data){ assert count+1 <=capacity; this.data[count+1] = data; count++; shifUp(count); } /** * 取出最大堆中的堆顶元素 */ public Integer extractMax(){ assert count > 0; Integer item = data[1]; swap(data,1,count); count--;/**减少数组容量*/ shifDown(1); return item; } private void shifDown(Integer k) { while(2*k<=count){ int j = 2*k; if(j+1<=count && data[j+1]>data[j]){ j++; } if(data[k]>=data[j]) break; swap(data,k,j); k = j; } } private void shifUp(int k) { while(k>1&&data[k/2]<data[k]){ swap(data,k,k/2); k /= 2; } } public static void swap(Integer[] arr,int i,int j){ int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } public static void main(String[] args) { Integer[] arr = TestSortHelper.generateRandomArray(10,1,50); //随机生成指定个数指定范围数组的方法 int n = 10; MaxHeap maxHeap = new MaxHeap(arr,n); for(int i=n-1;i>=0;i--) arr[i] = maxHeap.extractMax(); for(int i=0;i<n;i++) System.out.println(arr[i]); } }
相关文章推荐
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 《算法导论的Java实现》 7 堆排序
- 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)
- 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)
- 堆排序Java实现
- 堆排序的java实现
- 排序算法复习(Java实现):插入,冒泡,选择,Shell,快速排序, 归并排序,堆排序,桶式排序,基数排序
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 算法导论堆排序Java实现
- 算法学习之堆排序(java实现)
- 排序算法--选择排序(简单选择排序、堆排序)java实现
- [转载]堆排序(HeapSort) Java实现
- 堆排序及其JAVA实现
- 基本算法-堆排序及其Java实现
- Java实现快速排序、归并排序、堆排序
- 堆排序详解以及java实现
- 【转】排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 【转】排序算法复习(Java实现) (二): 归并排序,堆排序,桶式排序,基数排序
- java 实现堆排序