public class HeapSort {public static int heap_size;//双亲编号public static int parent(int i){return i/2;}//左孩子编号public static int leftChild(int i){return 2*i;}//右孩子编号public static int rightChild(int i){return 2*i + 1;}/*** 保持最大堆的性质* @param a,堆中的数组元素* @param i,对以该元素为根元素的堆进行调整,假设前提:左右子树都是最大堆* * 由于左右孩子都是最大堆,首先比较根元素与左右孩子,找出最大值,假如不是根元素,则调整两个元素的值;* 由于左孩子(右孩子)的值与根元素交换,有可能打破左子树(右子树)的最大堆性质,因此继续调用,直至叶子元素。*/public static void max_heapify(int[] a, int i){int left = leftChild(i);int right = rightChild(i);int largest = 0;if(left < heap_size && a[i]<a[left]){largest = left;}else{largest = i;}if(right < heap_size && a[right] > a[largest]){largest = right;}if(largest == i){return ;}else{int temp = a[i];a[i] = a[largest];a[largest] = temp;max_heapify(a, largest);}}/*** 建立最大堆。在数据中,a.length/2+1一直到最后的元素都是叶子元素,也就是平凡最大堆,因此从其前一个元素开始,一直到* 第一个元素,重复调用max_heapify函数,使其保持最大堆的性质* @param a*/public static void build_max_heap(int[] a){for(int i = a.length/2; i>=1; i--){max_heapify(a, i);}}/*** 堆排序:首先使用建立最大堆的算法建立好最大堆,然后将堆顶元素(最大值)与最后一个值交换,同时使得*               堆的长度减小1 ,调用保持最大堆性质的算法调整,使得堆顶元素成为最大值,此时最后一个元素已被排除在外、*/public static void heapSort(int[] a){build_max_heap(a);for(int i = a.length - 1; i>=2; i--){int temp = a[1];a[1] = a[i];a[i] = temp;heap_size--;max_heapify(a, 1);}}public static void main(String[] args) {int a[] = {0, 4, 1, 3, 2, 16, 9, 10,14, 8, 7};heap_size = a.length;heapSort(a);for(int i = 0; i< a.length; i++){System.out.print(a[i] + "  ");}}
}

堆排序算法(java实现)相关推荐

  1. 堆排序算法java左程云_堆排序算法以及JAVA实现

    堆的定义如下: n个元素的序列{k0,k1,...,ki,-,k(n-1)}当且仅当满足下关系时,称之为堆. " ki<=k2i,ki<=k2i+1;或ki>=k2i,ki ...

  2. 排序系列 之 堆排序算法 —— Java实现

       基本概念: 二叉堆是完全二叉树或者是近似完全二叉树. 当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆. 当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆. 一般将二叉堆简称 ...

  3. java 实现 堆排序算法_C程序实现堆排序算法

    java 实现 堆排序算法 Heap Sort is a comparison-based sorting algorithm that makes use of a different data s ...

  4. java 堆排序算法_堆排序算法的讲解及Java版实现

    这篇文章主要介绍了堆排序算法的讲解及Java版实现,堆排序基于堆这种数据结构,在本文中对堆的概念也有补充介绍,需要的朋友可以参考下 堆是数据结构中的一种重要结构,了解了"堆"的概念 ...

  5. Java实现堆排序算法

    堆排序是计算机编程中一种流行且高效的排序算法.学习如何编写堆排序算法需要了解两种类型的数据结构-数组和树. 我们要排序的初始数字集存储在数组中,例如[10, 3, 76, 34, 23, 32],排序 ...

  6. 堆排序 java_详解堆排序算法原理及Java版的代码实现

    概述堆排序是一种树形选择排序,是对直接选择排序的有效改进. 堆的定义如下:具有n个元素的序列(k1,k2,...,kn), 当且仅当满足: 时称之为堆.由堆的定义可以看出,堆顶元素(即第一个元素)必为 ...

  7. 【java排序】 归并排序算法、堆排序算法

    一.归并排序算法 基本思想: 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并 ...

  8. 九大排序算法Java实现

    之前学习数据结构与算法时花了三天时间整理九大排序算法,并采用Java语言来实现,今天第一次写博客,刚好可以把这些东西从总结的文档中拿出来与大家分享一下,同时作为自己以后的备忘录. 1.排序算法时间复杂 ...

  9. 排序算法java实现

    1. 插入排序 原理:遍历到第N个元素的时候前面的N-1个元素已经是排序好的了,那么就查找前面的N-1个元素把这第N个元素放在合适的位置,如此下去直到遍历完序列的元素为止.     算法的复杂度也是简 ...

  10. 视频教程-内功修炼之数据结构与算法-Java

    内功修炼之数据结构与算法 2018年以超过十倍的年业绩增长速度,从中高端IT技术在线教育行业中脱颖而出,成为在线教育领域一匹令人瞩目的黑马.咕泡学院以教学培养.职业规划为核心,旨在帮助学员提升技术技能 ...

最新文章

  1. 词袋模型(bag of words)构建并使用主题模型(topic models)特征进行文本聚类分析(clustering analysis)实战
  2. cyico收集的关于utf8转换gb2312,以及关于javascript实现urlencode和urldecode的一些方法...
  3. 主业失利,跨界捞金,飞科的算盘能如意吗?
  4. 在ASP.net 中对GridView中数据的删除、编辑等操作:
  5. 【java基础知识】java分层思想
  6. python是什么课程-python课程体系是怎么样的?
  7. 常用的工具网站和收藏文章
  8. C++ vector和set的区别
  9. AI实现的两种方案,暴力推演与因果率
  10. 微信小程序Day4学习笔记
  11. java int格式转换文本_java 文件导出Excel 文本形式转数字格式解决,字段是int导出需求是数字解决方案...
  12. C# 结束进程的解决方法
  13. 神秘代码(链接至steam指南)
  14. matlab 颜色对应三原色(转)
  15. 朱光领衔百度金融高管团队曝光,要憋大招的节奏?
  16. 恭喜叶总完成从前端码农到技术负责人的蜕变……
  17. 商品新零售行业——客户价值分析驾驶舱(附详细操作)
  18. 1到n中能被3和7整除的数的和
  19. xwiki安装使用以及问题解决
  20. 解析微波辐射计数据,并上传到mysql数据库(pandas应用及mysql操作)

热门文章

  1. 网络设备配置与管理————10、命令行接口
  2. 浙大PAT 1034 Head of aGang
  3. 用无线插板控制RC(远程遥控)小车
  4. python证书认证_使用Python进行证书认证的Selenium Webdriver
  5. jquery遍历后台数据
  6. mapStateToProps,mapDispatchToProps的使用详解
  7. 用exec()函数执行新程序
  8. Diagrams(draw.io)-怎样实现跨线
  9. 扫地僧是怎样练成的,前辈学51单片机的感悟是怎么样的
  10. android 服务检测,Android检测某个服务是否还活着代码