堆排序
2016-06-05 23:24
288 查看
堆排序
堆排序是在二叉堆的基础上进行的排序,其时间复杂度为线性对数,而且不需要额外的空间,是原址排序。import edu.princeton.cs.algs4.StdOut; public class HeapSort { public static void sort(Comparable[] a){ int N = a.length; for(int k = N/2; k>=1; k--) //堆的构造,自底向上狗造,从有子节点的最大节点开始 sink(a, k, N); while(N > 1){ exch(a, 1, N--); //将最大的元素与最后一位元素交换,将N减一,下面的排序不会再用到它 sink(a, 1, N); //交换后又肯能改变了序列,所以要将堆再次有序化 } } private static void exch(Comparable[] a, int i, int j) { // TODO Auto-generated method stub Comparable t = a[i]; a[i] = a[j]; a[j] = t; } private static void sink(Comparable[] a, int k, int N) { // TODO Auto-generated method stub while(2*k<=N){ int j = 2*k; if(j<N && less(a,j,j+1)) j++; if(less(a,k,j)) break; exch(a,k,j); k = j; } } public static void show(Comparable[] a) { // TODO Auto-generated method stub for(int i = 0; i <a.length;i++ ) StdOut.print(a[i] + " "); StdOut.println(); } private static boolean less(Comparable[] a,int k, int j) { // TODO Auto-generated method stub return a[k].compareTo(j)<0; } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 在命令行用 sort 进行排序
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序