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. python sqlite数据库一对多_Python:使用sqlite3进行多处理
  2. 全志 添加PWM7参数
  3. Java实现替换多个字符串中的参数
  4. 数据结构——快速排序(使用Java)
  5. VC控件 Tab Control
  6. 【Python 必会技巧】三元表达式(三目运算符)
  7. 使用tcpdump,adb进行手机抓包
  8. 曲面化原理创新设计_曲面丝印机会给我们带来什么样的美丽
  9. 源码安装mysql初始化报错_源码安装MySQL5.6.39后,修改配置文件启动报错
  10. 取字模软件的资源与链接
  11. 美国国父乔治华盛顿首任就职演说
  12. \itshape和\textit的区别or用法
  13. Java实现 LeetCode 275 H指数 II
  14. 对8086的存储器扩展
  15. 【笔记】Polygon mesh processing 学习笔记(10)
  16. JavaScript入门小试,水仙花数的辨别以及再深入学习一些定义区间。
  17. 记一次网易七鱼云客服开发记录
  18. 《Java 技术体系》之一:Java 技术体系概览
  19. 卫生健康信息生态体系的关键技术应用摘要
  20. HWiNFO32无法加载

热门文章

  1. DC-DC电源模块的九个主要性能指标和作用
  2. 一步步教你怎么用python写贪吃蛇游戏!
  3. linux sh解释器
  4. 查看表空间使用率(包括临时表空间)
  5. 【算法】算法学习网站
  6. 多投影-------边缘融合
  7. intel无盘服务器,英特尔网吧服务器
  8. c语言字母存储,字符串在内存中的储存——C语言进阶
  9. java中BitSet详解
  10. [DLX]HDOJ4069 Squiggly Sudoku