算法导论:堆排序(java实现)
2018-02-08 16:04
381 查看
import java.util.*; public class Sort { public static void main(String[] args) { int[] a; a = setArray(); heapsort(a); for(int e:a) System.out.print(e+" "); } public static int[] setArray() { int n; Scanner in = new Scanner(System.in); n = in.nextInt(); int[] a = new int ; for(int i=0;i<a.length;i++) { a[i] = in.nextInt(); } return a; } public static int parent(int i) { return i/2; } public static int left(int i) { return 2*i; } public static int right(int i) { return 2*i+1; } public static void max_heapify(int[] a,int i,int b) { int l,r,largest; l = left(i); r = right(i); if(l<=b&&a[l-1]>a[i-1]) largest = l; else largest = i; if(r<=b&&a[r-1]>a[largest-1]) largest = r; if(largest!=i) { int temp; temp = a[i-1]; a[i-1] = a[largest-1]; a[largest-1] = temp; max_heapify(a,largest,b); } } public static void build_max_heap(int[] a) { int heap,j; heap = a.length/2; for(j=heap;j>=1;j--) { max_heapify(a,j,a.length); } } public static void heapsort(int[] a) { int heap,temp; heap = a.length; build_max_heap(a); for(int i=heap;i>=2;i--) { temp = a[i-1]; a[i-1] = a[0]; a[0] = temp; heap--; max_heapify(a,1,heap); } } }
相关文章推荐
- 《算法导论的Java实现》 堆排序
- 《算法导论的Java实现》 7 堆排序
- 算法导论堆排序Java实现
- 算法导论堆排序java实现
- 算法导论Java实现-堆排序(6.4章节)
- 《算法导论的Java实现》 11 基本数据结构
- 算法导论之插入算法JAVA实现
- 《算法导论的Java实现》 8 快速排序
- 堆排序(java实现)
- 《算法导论的Java实现》 9 线性时间排序
- 排序算法复习(Java实现):插入,冒泡,选择,Shell,快速排序, 归并排序,堆排序,桶式排序,基数排序
- 算法导论Java实现-选择排序(习题2.2-2)
- 算法导论Java实现-MAX-HEAPIFY算法(6.2章节)
- 算法导论Java实现-二分插入排序(习题2.3-6)
- 算法导论Java实现-合并排序(包含习题2.3-2)
- 算法导论Java实现-随机化数组的两种方式(5.3章节)
- 《算法导论的Java实现》 1_1.1 插入排序
- 【转】排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 《算法导论的Java实现》 1_3.1 分治算法
- 算法导论Java实现-合并排序(包含习题2.3-2)