堆排序的时间复杂度是O(n*logn)

#include <iostream>
#include <algorithm>
using namespace std;void max_heapify(int arr[], int start, int end)
{//建立父节点指标和子节点指标int dad = start;int son = dad * 2 + 1;while (son <= end)  //若子节点指标在范围内才做比较{if (son + 1 <= end && arr[son] < arr[son + 1]) //先比较两个子节点大小,选择最大的son++;if (arr[dad] > arr[son]) //如果父节点大於子节点代表调整完毕,直接跳出函数return;else  //否则交换父子内容再继续子节点和孙节点比较{swap(arr[dad], arr[son]);dad = son;son = dad * 2 + 1;}}
}void heap_sort(int arr[], int len)
{//初始化,i从最後一个父节点开始调整for (int i = len / 2 - 1; i >= 0; i--)max_heapify(arr, i, len - 1);//先将第一个元素和已经排好的元素前一位做交换,再从新调整(刚调整的元素之前的元素),直到排序完毕for (int i = len - 1; i > 0; i--){swap(arr[0], arr[i]);max_heapify(arr, 0, i - 1);}
}void main()
{int arr[] = { 3, 5, 3, 0, 8, 6, 1, 5, 8, 6, 2, 4, 9, 4, 7, 0, 1, 8, 9, 7, 3, 1, 2, 5, 9, 7, 4, 0, 2, 6 };int len = (int) sizeof(arr) / sizeof(*arr);heap_sort(arr, len);for (int i = 0; i < len; i++)cout << arr[i] << ' ';cout << endl;system("pause");
}

【排序算法】堆排序——常规方法相关推荐

  1. 经典排序算法 - 堆排序Heap sort

    经典排序算法 - 堆排序Heap sort 堆排序有点小复杂,分成三块 第一块,什么是堆,什么是最大堆 第二块,怎么将堆调整为最大堆,这部分是重点 第三块,堆排序介绍 第一块,什么是堆,什么是最大堆 ...

  2. 排序算法 - 堆排序

    堆排序是指利用堆这种数据结构所设计的一种排序算法. 类型:选择排序 时间复杂度(最坏):O(nlogn) 时间复杂度(最好):O(nlogn) 时间复杂度(平均):O(nlogn) 空间复杂度:O(1 ...

  3. 排序算法 | 堆排序,算法的图解、实现、复杂度和稳定性分析

    今天讲解一下堆排序的原理以及实现.复杂度和稳定性分析 目录 1 堆的定义 2 堆排序的思路 3 代码实现 4 堆的输出(删除操作) 5 堆的插入操作 6 堆排序的特点 7 性能分析 1 堆的定义 堆排 ...

  4. php+堆排序算法,排序算法-堆排序-php

    什么是堆排序 堆排序是我们经常使用的排序算法,它是利用堆的结构进行排序,堆是一种二叉树结构,并且它的父节点的值都大于子节点或者都小于子节点,如果大于,就是大顶堆,如果小于就是小顶堆. 根据堆的定义,我 ...

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

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

  6. 排序算法-堆排序(C语言版)

    堆排序是一种基于完全二叉树结构的一种排序算法,其整体思想很简单,就是构建完全二叉树,但是这里需要引入堆的概念.如下 大顶堆:每个结点的值都大于或等于其左右孩子结点的值 小顶堆:每个结点的值都小于或等于 ...

  7. 十大经典排序算法----堆排序(超详细)

    目录 1. 堆排序的基础知识 1.1 大顶堆&&小顶堆 1.2 向下调整算法 1.3 物理结构与逻辑结构的关系 2. 堆排序详解 2.1 堆排序整体思路 2.2 思路详解 2.2.1  ...

  8. 排序算法 —— 堆排序

    引言 此文基于<经典数据结构--堆的实现>中堆结构,实现一个以堆处理排序的算法. 一.算法思想 基于堆结构的堆排序的算法思想非常简单,循环获取大根堆中的最大值(0位置的根节点)放到堆的末尾 ...

  9. 八大排序算法--堆排序

    序言 对于堆排序的学习,实际上就是对于 堆 这一种数据结构的学习,把堆学会了,堆排序自然也就学会了. 1.为什么使用堆这种数据结构 优先队列是一种很常用的队列,比如在游戏中,游戏角色在自动模式下,如何 ...

  10. 排序算法-------堆排序

    对于n个元素的序列{R0, R1, ... , Rn}当且仅当满足下列关系之一时,称之为堆: (1) Ri <= R2i+1 且 Ri <= R2i+2 (小顶堆) (2) Ri > ...

最新文章

  1. java学习(138):异常处理
  2. 2020年计算机视觉学习指南
  3. packetbeat mysql_简单使用packetbeat
  4. 关于 SQL Server Analysis Services
  5. input和textarea的区别
  6. 20160408javaweb之JDBC 大二进制和大文件存取
  7. nginx 增加stream_realip_module模块
  8. php png 透明缩略图,php生成图片缩略图,支持png透明
  9. 从 0 基础到 10w 册数据分析书籍的畅销书作家
  10. 各种工作面板护眼模式颜色设置
  11. 组合数学 —— 常用组合公式
  12. linux 安装pureftp
  13. android常见线程简要分析
  14. godaddy php mail,如何使用godaddy web主机上的phpmailer通过365发送电子邮件
  15. 拆书帮第14期训练营——作业一:如何进行有目的的练习
  16. 前端必会的anime动画库
  17. sap fi清账函数POSTING_INTERFACE*的使用
  18. Java开发失业,摆摊卖梨膏罐头!
  19. 程序员被裁员该怎么办
  20. 2022年计算机软件水平考试信息系统监理师(中级)练习题及答案

热门文章

  1. matlab figure函数_如何在Matlab中使用GUI做一个简易音乐播放器? ---- (六)控件间的数据传递...
  2. pta 是否完全二叉搜索树_23.二叉搜索树的后序遍历序列
  3. 系统学习深度学习(二十三)--SqueezeNet
  4. enclosing type java_Java ResolvedJavaType.getEnclosingType方法代码示例
  5. “21天好习惯”第一期-17
  6. 存定期还能加钱进去吗_还要去银行存定期吗?六大行叫停靠档计息个人存款产品...
  7. 借Google Guava学习发现和开发通用功能模块
  8. 为什么需要建设者模式
  9. Zephyr单元测试框架:ztest/twister的使用和介绍
  10. 关于SpringMVC中model的attribute无法指定别名的解决方案