堆排序
来源:互联网 发布:绿盟数据库审计系统 编辑:程序博客网 时间:2024/06/16 18:42
堆排序
package com.buaa.algorithm.sort;/** * 堆排序 * @author lzxyzq * */public class d3HeapSorted { //节点k进行筛选 //a:堆数据,n:堆中有效数据个数,k待筛选节点 static void heapOne(int[]a,int n,int k){ int k1 = 2*k + 1; int k2 = 2*k + 2; if(k1>=n&&k2>=n)return;//已经是叶子了 int a1 = Integer.MAX_VALUE; int a2 = Integer.MAX_VALUE; if(k1<n) a1 = a[k1];//左孩子值 if(k2<n) a2 = a[k2];//右孩子值 if(a[k]<=a1&&a[k]<=a2)return;//符合堆的要求 //找到左右孩子中最小的,和它交换 if(a1<a2){ int t = a[k]; a[k] = a[k1]; a[k1] = t; heapOne(a,n,k1); }else{ int t = a[k]; a[k] = a[k2]; a[k2] = t; heapOne(a,n,k2); } } static void heapSort(int[]a) { //建立初始堆 for(int i=(a.length-1)/2;i>=0;i--) heapOne(a,a.length,i); //边输出堆顶,边调整 int n = a.length;//剩余元素数 while(n>0){ System.out.print(a[0]+" ");//输出堆顶元素 a[0] = a[n-1]; n--; heapOne(a,n,0); } System.out.println();} public static void main(String[] args) { int[]a = {12,3,6,8,5,19,20,16,4,2,7,13,9,11}; heapSort(a); }}
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- linux基础操作
- 上机报告5-1项目一数组分离
- 保存特殊字符到utf8编码的mysql数据库中
- 网络的可靠性
- Android 设置字体
- 堆排序
- PAT1001A+B Format (20)
- Android编程权威指南学习笔记02
- Manacher算法求字符串的最长回文子串
- 解决魅族手机在下拉刷新的时候出现hold
- 【NoSQL】redis集群的搭建
- C++STL中vector容器的用法
- 懒加载时,点语法使用注意事项
- centos6.5 安装和卸载R