算法之排序小结3---堆排序(Java)
来源:互联网 发布:用cad画网络拓扑图 编辑:程序博客网 时间:2024/06/11 03:47
public class heapSort { //维护最大堆性质的重要过程.即每次调整都是//从父节点、左孩子节点、右孩子节点三者中选择最大者跟父节点进行交换(交换之后可能造成被交换的孩子节点不满足堆的性质,因此每次交换之后要重新对被交换的孩子节点进行调整)。public static void maxHeapModiify(int []A, int i,int size){int left,right,largest;if(i < size/2) { //若是i不小于长度的一半,则不进行修正,就是对叶子节点不修正if(i == 0){left = 1;right = 2;}else{left = 2*i + 1;right = 2*i + 2;}if(left <= size && A[left] > A[i])//必须是左节点先处理,{largest = left;}elselargest = i;if(right < size && A[right] > A[largest]){largest = right;}if(largest != i){int tmp = A[i];A[i] = A[largest];A[largest] = tmp;maxHeapModiify(A,largest,size);}}}public static void buidHeap(int A[],int size){int i = size/2-1;for(;i>=0; i--)//注意:实际数组是从下标0开始的,maxHeapModiify(A, i,size); //i值是有约束的}public static void heapSort1(int []A,int size){buidHeap(A,size);for(int i = A.length - 1; i>=1; i--){int tmp = A[i];A[i] = A[0];A[0] = tmp;maxHeapModiify(A,0,i);}}public static void main(String[] args) {// TODO Auto-generated method stubint []A = {16,7,3,20,17,8,9,5,12};heapSort1(A,A.length);for(int i = 0; i < A.length; i++){System.out.print(A[i]+" ");}}}
具体原理参考<算法导论>
点击打开链接http://www.cnblogs.com/dolphin0520/archive/2011/10/06/2199741.html
0 0
- 算法之排序小结3---堆排序(Java)
- 堆排序 -- 算法小结
- java算法之堆排序
- java排序算法之堆排序
- java排序算法之堆排序
- 排序算法之堆排序Java版
- Java实现排序算法之堆排序
- java实现排序算法之堆排序
- 排序算法之堆排序(Java)
- Java常用排序算法之堆排序
- 排序算法之堆排序java实现
- 排序算法之堆排序 Java 实现
- Java排序算法之堆排序
- 排序算法之堆排序--Java语言
- 排序算法之堆排序(JAVA实现)
- 算法之排序小结1---插入排序(Java)
- 算法之排序小结2---归并排序(Java)
- 排序算法 之 堆排序(heapsort)
- #import #include @class的区别
- Windows内核驱动开发入门学习资料
- 19 Shell 排序法 - 改良的插入排序
- Java ArrayList 的insert实现
- 公司的项目 的 多分辨率适配 工作
- 算法之排序小结3---堆排序(Java)
- ifeq ifneq ifdef ifndef
- 起航
- linux 更改环境变量
- 视频实时滤镜
- 将博客搬至CSDN
- Java总结之GUI编程
- NSHomeDirectory解析
- Codeforces Round #274 (Div. 2) --A Expression