Java 堆排序的实现
来源:互联网 发布:百度阿波罗 知乎 编辑:程序博客网 时间:2024/05/16 08:46
package algorithm;public class HeapSort {public static int heap_size;public static int parent(int i){return i/2;}public static int rightChild(int i) {// TODO Auto-generated method stubreturn 2*i+1;}public static int leftChild(int i) {// TODO Auto-generated method stubreturn 2*i;}//与左右子树比较,找最大的arr[i]交换public static void max_heapify(int[] arr, int i) {// TODO Auto-generated method stubint left = leftChild(i);int right = rightChild(i);int largest = 0;if(left<heap_size&&arr[left]>arr[i]){largest=left;}else largest = i;if(right<heap_size&&arr[right]>arr[largest])largest = right;if(largest == i)return;else{ int temp = arr[i]; arr[i] = arr[largest]; arr[largest] = temp; max_heapify(arr, largest);}}//建一个大顶堆,在数据中,a.length/2+1一直到最后的元素都是叶子元素public static void bulid_max_heap(int[] arr) {// TODO Auto-generated method stubfor(int i=arr.length/2;i>=0;i--){max_heapify(arr, i);}System.out.println("********初始堆***********");for(int j=0;j<arr.length;j++)System.out.print(arr[j]+" ");System.out.println("\n*******************");}public static void heapSort(int[] arr) {// TODO Auto-generated method stubbulid_max_heap(arr);//建一个大顶堆//看到网上有程序此处i>=2,与arr[1]做交换,不合适,应为数组从下班0开始存储for(int i=arr.length-1;i>=1;i--){int temp = arr[0];arr[0] = arr[i];arr[i] = temp;heap_size--;max_heapify(arr,0);}}public static void main(String[] args) {int arr[] ={ 0,4, 1, 3, 2, 16, 9, 10,14, 8, 7};heap_size = arr.length;heapSort(arr); for(int i=0;i<arr.length;i++){System.out.print(arr[i]+" ");}}}
0 0
- 堆排序的java实现
- 堆排序的JAVA实现
- Java 堆排序的实现
- 堆排序的JAVA实现
- 堆排序的JAVA实现
- 堆排序的Java实现
- 堆排序的java实现
- 堆排序的java实现
- 堆排序的java实现
- 堆排序的Java实现
- 堆排序的Java实现
- 堆排序的Java实现
- 堆排序的Java实现
- 堆排序的java实现
- java实现的堆排序(java)
- 【Java】堆排序的Java实现
- 堆排序Java实现
- 堆排序-java实现
- 安卓系统的硬件要求
- java 对象使用类变量与方法(小笔记)
- SAP 生产订单投料方式比较
- 编程学习笔记
- C++中使用模板完成对二维数组的通用访问
- Java 堆排序的实现
- DB2 优化 RUNSTATS:排除索引碎片故障
- sybase touch
- How To Grab Someone IP Address ?
- 窗口创建相关函数
- NYOJ--113 字符串替换
- 系统运营浅谈
- Executor线程池
- java经典问题:byte b=1、b=b+1、b+=1