2019独角兽企业重金招聘Python工程师标准>>>

/*** 堆排序* 简述:*      首先使用建立最大堆的算法建立好最大堆,然后将堆顶元素(最大值)与最后一个值交换,同时使得堆的长度减小1 ,调用保持最大堆性质的算法调整,使得堆顶元素成为最大值,此时最后一个元素已被排除在外* 时间复杂度:*        Θ(nlgn)* 空间复杂度:*        * 优点:*      * 缺点:*      想着就挺麻烦的。。。相比其他排序,相对难理解一点点* 可改进:*         * @author CheN**/
public class HeapSort {private static int heapSize;//左孩子编号private static int getLeftChild(int i){return 2 * i;}//右孩子编号private static int getRightChild(int i){return 2 * i + 1;}/*** 保持最大堆的性质(孩子不分左右,均比父节点小)* @param array,堆中的数组元素* @param i,对以该元素为根元素的堆进行调整,假设前提:左右子树都是最大堆* * 由于左右孩子都是最大堆,首先比较根元素与左右孩子,找出最大值,假如不是根元素,则调整两个元素的值;* 由于左孩子(右孩子)的值与根元素交换,有可能打破左子树(右子树)的最大堆性质,因此继续调用,直至叶子元素。*/private static void maxHeapify( int[] array , int index ){int left = getLeftChild( index );int right = getRightChild( index );int largest = 0;if( left < heapSize && array[ index ] < array[ left ]){largest = left;}else{largest = index;}if( right < heapSize && array[ right ] > array[ largest ]){largest = right;}if( largest == index ){return ;} else {int temp = array[ index ];array[ index ] = array[ largest ];array[ largest ] = temp;maxHeapify( array, largest );}}/*** 建立最大堆。在数据中,array.length/2+1一直到最后的元素都是叶子元素,因此从其前一个元素开始,一直到第一个元素,重复调用maxHeapify函数,使其保持最大堆的性质* @param array*/private static void buildMaxHeap(int[] array){for( int i = array.length / 2 ; i >= 1; i-- ){maxHeapify( array , i );}}/*** 堆排序:*/public static void asc( int[] array ){// 找出最小元素,并将其置于array[0]int min = array[0];for(int i = 1 ; i < array.length ; i++ ){if( min > array[i] ){min = array[i];array[i] = array[0];array[0] = min;}}//调用保持最大堆性质的算法调整,似的对应元素成为最大值,此时最后一个元素已被排除在外heapSize = array.length;buildMaxHeap( array );for(int i = array.length - 1 ; i >= 2 ; i--){int temp = array[1];array[1] = array[i];array[i] = temp;heapSize--;maxHeapify( array , 1 );}}
}

若有错误或不妥之处,敬请谅解并指点。

转载于:https://my.oschina.net/wangchen881202/blog/192324

排序算法笔记:堆排序 HeapSort in java相关推荐

  1. 十大排序算法之堆排序

    十大排序算法之堆排序 本文采用Java书写选择排序,其他语言类似可以借鉴着写 思想:所谓堆排序就是通过构造最大堆(升序)或者最小堆(降序)来进行排列的方法.可能有些童鞋不知道何为最大堆,何为最小堆.这 ...

  2. Java常见排序算法之堆排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  3. 终于,把十大经典排序算法汇总了!(Java实现版)

    转载自  终于,把十大经典排序算法汇总了!(Java实现版) 最近几天在研究排序算法,看了很多博客,发现网上有的文章中对排序算法解释的并不是很透彻,而且有很多代码都是错误的,例如有的文章中在" ...

  4. 数据结构与算法:十大排序算法之堆排序

    数据结构与算法:十大排序算法之堆排序 堆排序可以说是选择排序的优化 package TopTenSortingAlgorithms;import java.util.Arrays; import ja ...

  5. 算法笔记-堆排序(C版本)

    算法笔记-堆排序 作者:星河滚烫兮 前言   本文重点关注堆排序代码的实现,因为注释写的比较详细,大家可以结合代码与注释学习.堆排序其实就是利用二叉堆这种数据结构的特性进行排序,二叉堆又分为最大堆(大 ...

  6. 排序算法(五)——堆排序算法详解及Python实现

    本文目录 一.简介 二.算法介绍 三.代码实现 排序算法系列--相关文章 一.简介 堆排序(Heap Sort)算法,属于选择排序类,不稳定排序,时间复杂度O(nlogn). 堆排序由Floyd和Wi ...

  7. 排序算法(6)堆排序

    排序算法(6)堆排序---选择排序的高级版 思想:利用数据结构堆的思想来排序,堆排序利用了大堆(或小堆)堆顶记录的关键字最大(或最小)这一特征,使得当前无序的序列中选择关键最大(或最小)的记录变得简单 ...

  8. 排序算法之---堆排序(很重要的一个结构,新手入门必备)

    排序算法之---堆排序(很重要的一个结构,新手入门必备) 先来简单的介绍一下堆结构: 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlo ...

  9. 大顶堆小顶堆java_《排序算法》——堆排序(大顶堆,小顶堆,Java)

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

  10. 十大经典排序算法之堆排序(Java代码实现)

    算法原理 堆排序(Heap Sort)是指利用堆这种数据结构所设计的一种排序算法.堆积是一个近视完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父节点.堆排序可以说 ...

最新文章

  1. 文件查找命令find的使用
  2. 赵雪轩:数据科学助力我的智能化航天梦 | 提升之路系列
  3. 一场科技盛宴,一次“盈”满天下 安创成长营五期Demo Day完美收官
  4. 顺序表应用1:多余元素删除之移位算法
  5. boost::test模块测试可变参数样本元素支持和数据集定义的移动语义
  6. C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限
  7. python简单爬豆瓣电影排名
  8. 域控制器与客户机之:域账号不能登录问题排查
  9. springboot mysql脚本_springboot配置mysql连接的实例代码
  10. mysql linux root密码忘记了怎么办_linux下忘记mysql root密码解决办法
  11. 中文信息处理(三)—— 词性标注
  12. jq 如何获取多选框选中的值
  13. 如何确定变量是“未定义”还是“空”?
  14. 转-python面试题目集锦(100道部分附答案)
  15. #pragma once 与 #ifndef 解析(转载)
  16. 速达5000进销存PDA条码打印扫码开单-吉度PDA定制
  17. win10您的计算机配置文件,Win10系统开机登录提示无法加载用户配置文件如何解决...
  18. vc模拟 tabletpc_KB895953-TCServer.exe TabletPC崩溃/内存泄漏HotFix
  19. http405错误解决
  20. Unable to obtain current patch information due to error: 20001, ORA-20001: Latest xml inventory is n

热门文章

  1. web入门+书籍推荐
  2. ecshop仿淘宝加入购物车弹出框【支持任何页面】淡出淡隐固定屏幕-兼容ie
  3. MFC中的MainFrame Dlg,App,Doc,View的关系
  4. Google App Engine(GAE)入门教程翻译
  5. 股骨截骨php钢板,股骨远端截骨(DFO)术前设计及手术步骤【附视频】
  6. Segment Routing — SRv6 — SRv6 协议解析
  7. Go 语言编程 — net 库
  8. 使用Devstack部署neutron网络节点
  9. altium designer pcb文件大
  10. 电感和磁珠的区别及应用场合和作用