千锋杭州大数据培训教程分享:堆排序
经过这一个月的学习,我感觉学到了不少关于以后发展的东西,之前因为学过Java基础,所以这一阶段对我来说并不是很困难,但经过再一次的学习,使我对java基础有了更深的了解。在之前有一些东西是死记硬背的,只会套着用,而现在能够灵活使用了。老师闫哥的编程思想也对我影响很大,使我现在的编程比以前更加成熟,对知识的把握更加系统。在第一阶段中,我们学习了八大排序中的选择排序和冒泡排序,之后我又自己学习了堆排序。接下来我向大家分享一下我所理解的堆排序。
一、什么是堆排序
堆排序是将数组看做一个完全二叉树(附录里有二叉树的解释),具有以下的性质:
1)每个节点的值都大于子节点的值,叫做大顶堆。
2)每个节点的值都小于子节点的值,叫做小顶堆。
二、堆排序的实现原理
大顶堆是将数组按照升序的方式进行排序。其原理在于:
1)从最后一个根节点开始,比较父节点和两个子节点的值,如果子节点的值大于父节点,则交换两点的数值,否则不交换。
2)从最后一个根节点依次比较到顶点 ,也就是上图0节点的位置。这样进行一轮比较之后,得到的0节点的数值就是该数组中最大的数值。
3)再将0节点的数值与该数组最后一个子节点的数值进行交换。这是最后一个子节点位置上的值便是该数组中最大的值。
4)这时,把数组的倒数第二个子节点当做数组的结尾,再次将0节点作为父节点进行大顶堆操作,这样重复到数组的结尾为1节点,数组排序完成。
5)将数组输出可以看到该数组变为一个升序的数组。
而小顶堆则与大顶堆正好相反。
三、代码实现:
package JavaDay_13
publc class Heapsort {public static void main(String[] args) {int[] arr ={1,5,6,8,7,2,3,4,9,4,15,12}; //创建一个数组
heapSort(arr); //调用heapSort方法进行第一次排序,选出最大值放在0节点
for(int i=0;i<arr.length;i++){ //将arr数组输出
System.out.print(arr+" ");}}
public static void heapSort(int[]arr){int n= arr.length-1;
for(int i=n/2-1;i>=0;i++){ //从最后一个根节点开始,直到0节点位置heapAdjust(arr,i,n); // 传入参数arr数组,父节点 i ,数组长度n }
for(int i=n;i>0;i--) { //从最后一个节点开始,到取到倒数第二个节点swap(arr,i); //调用方法,将此时的 i 与arr数组的第一个值交换
heapAdjust(arr,0,i-1); //再次构建大顶堆}}
public static void heapAdjust(int[] arr,int parent,int length) {int temp = arr[parent]; //设置一个初始值记录arr[parent]的数值
for(int i=parent*2+1;i<=length;i=i*2+1) {// i为父节点的左节点,每次循环结束后,i节点成为父节点,i迭代为自己之前的数的左节点
if(i<length && arr<arr[i+1]){i++; //如果i的左节点小于右节点,则i+1变为右节点}
if(temp>arr) {break; // 如果左右节点中较大的值小于父节点,则跳出 }
arr[parent] = arr; //让父节点的值变为i节点的值parent = i; //此时父节点变为i;}
arr[parent] = temp; // 将刚刚得到的父节点赋值给新位置}
public static void swap(int[] arr,int i) { //将数组arr中的i的值与0交int temp = arr[0]; arr[0] = arr;arr = temp;}}
在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作"左子树"和"右子树"。
完全二叉树--若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。
以上是堆排序相关知识点,以此纪念这段时间奋发图强的自己。不积跬步无以至千里,不积小流无以成江海,积累成就未来,以此自勉!
大数据的前景是毋庸置疑的,如果想进入这个"吸金"的领域,选择千锋大数据培训机构学习是明智之举。千锋大数据培训课程内容不断更新升级,让学生学到更加贴合企业需求和项目应用的一些高端技术,势必能进一步提高学生竞争力,为学员的高薪就业以及未来的发展保驾护航!

猜你喜欢LIKE
相关推荐HOT
更多>>
前端开发是做什么的?学会了好就业吗
前端开发是现在非常热火的一个词,但是很多人并不了解前端开发是做什么的,其实如果对于网页制作有了解的学员,会发现前端开发有很多关于网页制...详情>>
2023-02-09 15:39:51
java开发用什么软件比较靠谱?有哪些常用的
随着互联网的加速发展,java开发也成了当前时代的热门行业之一,很多人都想通过学习java开发技术,开拓新的就业渠道,帮助自己实现财富增值,但...详情>>
2023-02-08 14:48:59
杭州python培训完工资怎么样?
Python开发哪里都说好,但是到底有多好呢?小千今天就来带大家拿数据看一下杭州的Python开发能拿到多少的工资。详情>>
2020-12-09 14:16:00
杭州python培训机构面授多少钱?
有在杭州的小伙伴想要了解一下本地的面授Python培训班需要多少钱的学费,这里小千就来给大家介绍一下,以供大家在挑选培训班的时候参考。详情>>
2020-12-04 14:25:00热门推荐
5种方法教你如何利用新媒体进行内容营销和产品推广
沸Java培训一般需要多久?课程结束学不会怎么办?
热编程培训一般多少钱?怎么选择编程培训学校?
热学习python有什么用?常见用途介绍
新java和python的区别?java和python各自的优势是什么
ui设计分为哪几种?分别有什么特点
python培训费用要多少,哪家培训质量更高
学程序员大概多少钱?到哪里学比较好
计算机学前端好还是后端好?需不需要去培训
前端开发培训需要多长时间?去哪里培训好
前端开发工程师需要学什么?怎么学
web前端能干一辈子吗?到哪里培训比较好
现在学前端开发靠谱吗?需不需要去培训
前端培训班一般多少钱?营销价格的因素有哪些