介绍
本篇文章为大家展示了java中实现堆排序的原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强>堆是一个数组,被看成一个近似完全二叉树。强>
举例说明:
<强>堆的性质:强>
1。已知元素在数组中的序号为我
其父节点的序号为我/2的整数
其左孩子节点的序号为2 *我
其右孩子节点的序号为2 * i + 1
2。堆分为最大堆和最小堆
在最大堆中,要保证父节点的值大于等于其孩子节点的值
在最小堆中,要保证父节点的值小于等于其孩子节点的值
<强> java实现堆排序强>
public class MyHeapSort { public 才能;void  Heap_Sort (int [], A), { ,,,/* * ,,,,*,这个函数完成堆排序 ,,,,*,先构建一个最大的堆 ,,,,*,将数组中第一个元素和最后一个交换, ,,,,*,堆的长度减一 ,,,,*,在从第一个位置开始保证堆的性质调用Max_heapify()函数。 ,,,,*,这样保证目前最大的元素在数组的最后位置。 ,,,,*,以此类推,直到最后一个元素。 ,,,*/,,,Build_Max_Heap(一个); ,,,for (int 小姐:=,A.length 作用;1;,小姐:祝辞=,1;,我——),{ ,,,,,int temp =, [0]; ,,,,,一个[0],=,(我); ,,,,,一个[我],=,温度; ,,,,,Max_heapify (,, 0,, i); ,,,} ,,} public 才能;void  Build_Max_Heap (int [], A), { ,,,/* * ,,,,*,这个函数用来构建堆 ,,,,*,答:待排序的数组 ,,,,,(对于循环中我的值从数组长度的一般开始取,是因为完全二叉树的性质, ,,,,*,一半的节点叶根节点所以从叶节点开始向上遍历来保证堆的性质) ,,,*/,,,for (int 小姐:=,A.length/2,,小姐:祝辞=,0;,我——),{ ,,,,,Max_heapify(,,我,,A.length); ,,,} ,,} public 才能;void  Max_heapify (int [],,, int 我,int heap_size), { ,,,/* *这个函数用来维护堆的性质, ,,,,*,保证以序号为我的元素为根节点的子树中,父节点的值大于其孩子节点的值。 ,,,,*,答:待排序数组 ,,,,*,我:在数组一个中的序号 ,,,,*,heap_size:堆的大小 ,,,*/,,,int largest =,我; ,,,int l =,小姐:*,2,+,1; ,,,int r =,小姐:*,2,+,2; ,,,if (l & lt;, heap_size ,,,一个[l],祝辞,[我]),largest =, l; ,,,if (r & lt;, heap_size ,,,一个[r],祝辞,(最大)),largest =, r; ,,,if (largest !=, i), { ,,,,,int temp =,(我); ,,,,,一个[我],=,(最大); ,,,,,一个(最大的),=,温度; ,,,,,Max_heapify(最大,,,,heap_size); ,,,} ,,} public 才能;static  void main (String [], args), throws Exception { ,,,System.out.println(“测试结果:“); ,,,int [], a =, new int[]{1、3、2、5, 34岁,23日,44岁,15日,67年,45个}; ,,,new MyHeapSort () .Heap_Sort(一个); ,,,for (int x : a), System.out.println (x); ,,} }
代码中例子的运行结果:
java是什么
java是一门面向对象编程语言,可以编写桌面应用程序,网络应用程序,分布式系统和嵌入式系统应用程序。
上述内容就是java中实现堆排序的原理是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。