堆排序算法(java实现)
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实现)相关推荐
- 堆排序算法java左程云_堆排序算法以及JAVA实现
堆的定义如下: n个元素的序列{k0,k1,...,ki,-,k(n-1)}当且仅当满足下关系时,称之为堆. " ki<=k2i,ki<=k2i+1;或ki>=k2i,ki ...
- 排序系列 之 堆排序算法 —— Java实现
基本概念: 二叉堆是完全二叉树或者是近似完全二叉树. 当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆. 当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆. 一般将二叉堆简称 ...
- java 实现 堆排序算法_C程序实现堆排序算法
java 实现 堆排序算法 Heap Sort is a comparison-based sorting algorithm that makes use of a different data s ...
- java 堆排序算法_堆排序算法的讲解及Java版实现
这篇文章主要介绍了堆排序算法的讲解及Java版实现,堆排序基于堆这种数据结构,在本文中对堆的概念也有补充介绍,需要的朋友可以参考下 堆是数据结构中的一种重要结构,了解了"堆"的概念 ...
- Java实现堆排序算法
堆排序是计算机编程中一种流行且高效的排序算法.学习如何编写堆排序算法需要了解两种类型的数据结构-数组和树. 我们要排序的初始数字集存储在数组中,例如[10, 3, 76, 34, 23, 32],排序 ...
- 堆排序 java_详解堆排序算法原理及Java版的代码实现
概述堆排序是一种树形选择排序,是对直接选择排序的有效改进. 堆的定义如下:具有n个元素的序列(k1,k2,...,kn), 当且仅当满足: 时称之为堆.由堆的定义可以看出,堆顶元素(即第一个元素)必为 ...
- 【java排序】 归并排序算法、堆排序算法
一.归并排序算法 基本思想: 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并 ...
- 九大排序算法Java实现
之前学习数据结构与算法时花了三天时间整理九大排序算法,并采用Java语言来实现,今天第一次写博客,刚好可以把这些东西从总结的文档中拿出来与大家分享一下,同时作为自己以后的备忘录. 1.排序算法时间复杂 ...
- 排序算法java实现
1. 插入排序 原理:遍历到第N个元素的时候前面的N-1个元素已经是排序好的了,那么就查找前面的N-1个元素把这第N个元素放在合适的位置,如此下去直到遍历完序列的元素为止. 算法的复杂度也是简 ...
- 视频教程-内功修炼之数据结构与算法-Java
内功修炼之数据结构与算法 2018年以超过十倍的年业绩增长速度,从中高端IT技术在线教育行业中脱颖而出,成为在线教育领域一匹令人瞩目的黑马.咕泡学院以教学培养.职业规划为核心,旨在帮助学员提升技术技能 ...
最新文章
- 词袋模型(bag of words)构建并使用主题模型(topic models)特征进行文本聚类分析(clustering analysis)实战
- cyico收集的关于utf8转换gb2312,以及关于javascript实现urlencode和urldecode的一些方法...
- 主业失利,跨界捞金,飞科的算盘能如意吗?
- 在ASP.net 中对GridView中数据的删除、编辑等操作:
- 【java基础知识】java分层思想
- python是什么课程-python课程体系是怎么样的?
- 常用的工具网站和收藏文章
- C++ vector和set的区别
- AI实现的两种方案,暴力推演与因果率
- 微信小程序Day4学习笔记
- java int格式转换文本_java 文件导出Excel 文本形式转数字格式解决,字段是int导出需求是数字解决方案...
- C# 结束进程的解决方法
- 神秘代码(链接至steam指南)
- matlab 颜色对应三原色(转)
- 朱光领衔百度金融高管团队曝光,要憋大招的节奏?
- 恭喜叶总完成从前端码农到技术负责人的蜕变……
- 商品新零售行业——客户价值分析驾驶舱(附详细操作)
- 1到n中能被3和7整除的数的和
- xwiki安装使用以及问题解决
- 解析微波辐射计数据,并上传到mysql数据库(pandas应用及mysql操作)