数据结构与算法之堆排序


目录

  1. 堆排序介绍
  2. 代码实现

1. 堆排序介绍

堆排序(Heapsort)是指利用堆((英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。)这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。

分为两种方法:

  • 大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;
  • 小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;

堆排序的平均时间复杂度为 Ο(nlogn),空间复制度是O(1),是不稳定排序算法。


2. 代码实现


import java.util.Arrays;public class HeapSort {public static void heapSort(int[] arr) {if (arr == null || arr.length < 2)return;for (int i = 0; i < arr.length; i++)heapInsert(arr, i);int size = arr.length;swap(arr, 0, --size);while (size > 0) {heapify(arr, 0, size);//调整一次swap(arr, 0, --size);//换一个}}private static void heapify(int[] arr, int index, int size) {int left = index * 2 + 1;while (left < size) {int largest = left + 1 < size && arr[left + 1] > arr[left] ? left + 1 : left;largest = arr[largest] > arr[index] ? largest : index;if (largest == index)break;swap(arr, largest, index);index = largest;left = index * 2 + 1;}}private static void heapInsert(int[] arr, int index) {while (arr[index] > arr[(index - 1) / 2]) {swap(arr, index, (index - 1) / 2);index = (index - 1) / 2;}}private static void swap(int[] arr, int i, int i1) {int temp = arr[i];arr[i] = arr[i1];arr[i1] = temp;}public static void main(String[] args) {int[] arr = {6, 5, 1, 3, 4, 7};System.out.println(Arrays.toString(arr));heapSort(arr);System.out.println(Arrays.toString(arr));}
}

数据结构与算法之堆排序相关推荐

  1. Python天天美味(32) - python数据结构与算法之堆排序

    1. 选择排序 选择排序原理是先选出最小的数,与第一个数交换,然后从第二个数开始再选择最小的数与第二个数交换,-- def selection_sort(data):     for i in ran ...

  2. 数据结构与算法之六堆排序

    堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者Key[i]>=Key[2i+1]& ...

  3. 【数据结构排序算法系列】数据结构八大排序算法

    排序算法在计算机应用中随处可见,如Windows操作系统的文件管理中会自动对用户创建的文件按照一定的规则排序(这个规则用户可以自定义,默认按照文件名排序)因此熟练掌握各种排序算法是非常重要的,本博客将 ...

  4. 数据结构与算法详解(含算法分析、动图图解、Java代码实现、注释解析)

    数据结构和算法的重要性 算法是程序的灵魂,优秀的程序可以在海量数据计算时,依然保持高速计算 数据结构和算法的关系: 程序 = 数据结构 + 算法 数据结构是算法的基础, 换言之,想要学好算法,需要把数 ...

  5. 【数据结构和算法16】堆排序

    堆排序,顾名思义就是利用堆这个数据结构对数据项进行排序.前面提到过.堆数据结构中.节点大于或等于自己的子节点.那么我们能够将待排序的数据项依次加入到堆中,然后再依次取出根节点就可以.从堆中取出的数据项 ...

  6. 数据结构与算法 / 排序算法 / 堆排序

    一.定义 借助堆结构实现的排序算法被称为堆排序. 二.过程说明 1.建堆 (1)方法1 原地建堆,对于数组来说,从前往后:对于树来说,从下向上. 将数组的第一个元素作为堆顶,第二个元素做向堆中插入数据 ...

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

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

  8. java堆排序图解_108-堆排序的思路图解_清华毕业老程序员亲授通俗易懂的Java数据结构和算法​​​​教程_Java视频-51CTO学院...

    2.网上数据结构和算法的课程不少,但存在两个问题: 1)授课方式单一,大多是照着代码念一遍,数据结构和算法本身就比较难理解,对基础好的学员来说,还好一点,对基础不好的学生来说,基本上就是听天书了 2) ...

  9. 《数据结构与算法》实验:排序算法实验比较——选择排序 堆排序

    <数据结构与算法>实验和课程Github资源 <数据结构与算法>实验:线性结构及其应用--算术表达式求值 <数据结构与算法>实验:树型结构的建立与遍历 <数据 ...

最新文章

  1. selenium如何操作HTML5的画布canvas上的元素
  2. Inchat时代真的来了?上线一周突破百万用户
  3. docker-compose安装部署ELK
  4. IBatis.Net学习笔记十三:在IBatis.Net中调用存储过程
  5. [坑] IDEA Unable to import maven project 解决办法
  6. 机器人砂型铸造_安诺伊智能机器人丨助力压铸厂铸造工艺提升
  7. 手写AspNetCore 认证授权代码
  8. 从早期的初创企业到MongoDB的经理(播客)
  9. python中僵尸进程
  10. win7超极本盘符不见找回文件的方法
  11. SQL Server 2008 R2 SSRS 安装配置后无法使用问题的解决方法
  12. 二十三、常用的标签:见源码
  13. IOCAutofac与ORMEntityFramwork的联系--单例模式
  14. 某知名网络安全公司的渗透测试工程师面试题实战汇总
  15. 河北省计算机科学专业高校排名,河北省计算机类专业大学排名
  16. Activity子流程——调用子流程
  17. Output Shape和Param参数解释
  18. android实现箭头流程列表_Android下拉列表选项框及指示箭头动画
  19. u盘读不出来怎么修复?
  20. python制作qq登录界面_用Python实现一个最新QQ办公版(TIM)的登录界面

热门文章

  1. Spring Boot 定时任务
  2. ipv6链路本地地址ping不通
  3. IOS开发之表视图(UITableView)
  4. 解决Apache/PHP无法启动的问题
  5. Win7重启后IP地址无效
  6. flash cs3 代码提示 应该加强
  7. LoadRunner 脚本语言认识
  8. linux环境变量设置错误后,如何恢复
  9. HDU - 4348 To the moon(主席树区间更新-标记永久化)
  10. 牛客 - 阶乘(唯一分解定理)