经典排序之 堆排序

开了个公众号「aCloudDeveloper」,专注技术干货分享,期待与你相遇。

Author: bakari  Date: 2012.7.30

排序算法有很多种,每一种在不同的情况下都占有一席之地。关于排序算法我分“经典排序之”系列分别述之。本篇为堆排序。

堆排序是运用二叉树建立的一种排序方式,分为两个阶段,建堆和排序。

看建堆过程:

 1 /***********************************************  
 2  *  Author:bakari  Date:2012.7.29
 3  *  堆排序
 4  *  中心算法:关注建堆的过程
 5  *  i节点的子孩子节点为 2i+1 和 2i+2;
 6  ***********************************************/
 7 //建立堆的数据结构,此为最大堆
 8 void HeapSort::Build_Heap(int current,int last)
 9 {
10     int child = 2 * current + 1;
11     int temp = HeapList[current];
12     while(child <= last)
13     {
14         
15         if (child < last && HeapList[child] < HeapList[child + 1]) child ++; //找到孩子节点中最大的节点
16         if (temp > HeapList[child]) break;    //当前节点大于他的孩子节点说明满足最大堆的特点直接跳出循环 
17         else
18         {
19             HeapList[current] = HeapList[child];   //否则将当前节点与孩子节点交换
20             current = child;              //将孩子节点替换当前节点
21             child = current * 2 + 1;      //继续在孩子节点中找
22         }
23     }
24     HeapList[current] = temp;
25 }

上面有一处小技巧, i 节点 的子孩子节点为 2 i + 1 和 2 i + 2;这个是建堆的关键,上面算法建立的是最大堆,当然也可以建立最小堆,方法类似。

 

OK,堆一旦建好,就可以进行排序了:

 1 void HeapSort::Heap_Sort()
 2 {
 3     for(int i = (len - 2)/2;i >= 0;i--)
 4         Build_Heap(i,len-1);
 5     for (int i = len -1;i > 0; i--)
 6     {
 7         Swap(0,i);
 8         Build_Heap(0,i-1);
 9     }
10 }

转载于:https://www.cnblogs.com/bakari/archive/2012/08/11/2633692.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统之进程概念

进程概念 进程是什么&#xff1a; 表面上来说进程是程序的一个执行实例&#xff0c;或者是一个正在执行的程序等&#xff0c;从操作系统的角度来说&#xff0c;程序运行需要将代码数据加载到内存中&#xff0c;由于在操作系统中运行了很多的程序&#xff0c;操作系统就必须去管…

也谈压缩感知和贝叶斯大脑

来源&#xff1a;科学网压缩感知和人工智能都是当下很热很热的研究课题。不过许多论文数学论述高深莫测&#xff0c;加之一大堆各种千奇百怪的数学符号&#xff0c;不仅让人望而生畏&#xff0c;望而却步。笔者对希望用形象的比喻把问题大致轮廓讲清楚就好。所谓压缩感知是什么…

一篇文章搞懂数据仓库:三种事实表(设计原则,设计方法、对比)

目录 1、三种事实表概述 2、三种事实表对比 3、事实表设计 8 大原则 4、事实表设计方法 第一步&#xff1a;选择业务过程及确定事实表类型 第二步&#xff1a;声明粒度 第三步&#xff1a;确定维度 第四步&#xff1a;确定事实 事实表作为数据仓库维度建模的核心&#…

深思考人工智能蝉联SMP2018多轮语义对话冠军,报告解读多轮人机对话实现过程...

人机对话技术近年来受到了学术界和产业界的广泛关注&#xff0c;其发展影响并推动着语音识别与合成、自然语言理解、对话管理以及自然语言生成等研究的进展。众多产业界巨头相继推出了人机对话技术相关产品&#xff0c;并将人机对话技术作为其公司的重点研发方向。8月3日&#…

一篇文章搞懂数据仓库:数据仓库规范设计

目录 一、为什么要进行规范设计&#xff1f; 二、设计规范 - 指标 三、命名规范 - 表命名 3.1 常规表 3.2 中间表 3.3 临时表 3.4 维度表 四、开发规范 五、流程规范 一、为什么要进行规范设计&#xff1f; 无规矩、不方圆。规范设计是在具体开发工作之前制定的&…

map的详解及常见面试题

map的概念 map是STL中的一个关联式容器&#xff0c;它提供一对一的K-V的数据处理能力&#xff0c;由于这个特性&#xff0c;在我们需要完成Key-Value数据处理的时候可以很方便的调用。map的底层结构是红黑树&#xff0c;这棵树对数据有自动排序的功能&#xff0c;所以map中的数…

无处不在的人工智能,IBM沃森的20个行业应用

来源&#xff1a;资本实验室聚焦前沿科技创新与传统产业升级自2011年在美国综艺电视节目《危险边缘》中一战成名后&#xff0c;IBM的Watson就一直是最受关注的人工智能之一。从菜谱分析到球队管理&#xff0c;从健康顾问到酒店礼宾服务&#xff0c;Watson基于自然语言处理和机器…

一篇文章搞懂数据仓库:数据仓库架构-Lambda和Kappa对比

在介绍Lambda和Kappa架构之前&#xff0c;我们先回顾一下数据仓库的发展历程&#xff1a; 传送门-数据仓库发展历程 写在前面 咳&#xff0c;随着数据量的暴增和数据实时性要求越来越高&#xff0c;以及大数据技术的发展驱动企业不断升级迭代&#xff0c;数据仓库架构方面也在…

宇宙和你,本质上其实只是个八维数字?

剑桥大学的数学物理学家Cohl Furey正在寻找粒子物理标准模型和八元数之间的联系。八元数的乘法规则被编码在被称为法诺面的三角图中。来源&#xff1a; 环球科学对于一维、二维乃至四维的数字&#xff0c;人们都不陌生&#xff1a;一维的实数一直都存在于经典物理中&#xff0c…

一篇文章搞懂数据仓库:数据应用--OLAP

目录 1、OLAP和OLTP的区别 2、OLAP分类 3、OLAP基本操作 4、OLAP选型 1、olap和oltp的区别 OLTPOLAP对象业务开发人员分析决策人员功能日常事务处理面向分析决策模型关系模型多维模型数据量几条或几十条记录&#xff1e;百万于万条记录操作类型增、删、查、改(CRUD)查询为主…

欧洲、美国、中国智慧城市的不同实践路径

来源&#xff1a;远望智库摘要&#xff1a;随着ICT、大数据、物联网等各类新兴技术的不断发展&#xff0c;智慧城市的运营和实践也不断趋于成熟。随着ICT、大数据、物联网等各类新兴技术的不断发展&#xff0c;智慧城市的运营和实践也不断趋于成熟。通过整理欧美各大典型智慧城…

使用IOUtils和FileUtils

文本输出应该比较常用&#xff0c;以前都是通过反复的创建InputStream, InputReader, OutputStream, OutputWriter等去输入输出文本&#xff0c;比较麻烦。Apache提供了一个commons-io.jar包&#xff0c;里面有很多IO相关的工具&#xff0c;比如输入输出文本等&#xff0c;着实…

重磅推荐:机器人行业深度报告

来源&#xff1a;WPR随着中国人口红利消失&#xff0c;机器人不仅在制造业上正在替代工人&#xff0c;还将在军事、服务、娱乐等领域取代人类&#xff0c;“钢铁侠”已不仅仅存在于美国科幻电影中&#xff0c;而正走入我们的生活。本篇报告对机器人行业及龙头上市公司进行分析&…

Could not create directory F:\Qt\Test\Error in Util.asciify(build-First_02-Desktop_Qt_5_6_3_Min

第一次使用的Qt的时候出现了这种错误&#xff01; 相信很多人在第一次使用的时候都会遇到这样的情况&#xff0c;果不其然&#xff0c;搜了一下很多的处理方法&#xff0c;其中有一种我感觉是最有效的&#xff0c;就是改一下他的生成路径就好了&#xff0c;因为这个错误的出现…

一篇文章搞懂数据仓库:总线架构、一致性维度、一致性事实

目录 1、概述 总线架构 一致性维度 一致性事实 2、总线架构demo 1、概述 在Kimball的维度建模的数据仓库中&#xff0c;关于多维体系结构&#xff08;MD&#xff09;有三个关键性概念&#xff1a;总线架构&#xff08;Bus Architecture&#xff09;&#xff0c;一致性维…

路易斯·罗森伯格与「群体智能」

选自 | Gigaom编译 | 网易智能&#xff08;smartman163&#xff09;参与 | 李擎与谷歌、Facebook等开发“传统意义上的人工智能”的技术不同&#xff0c;在Unanimous A.I.&#xff0c;科学家们利用人工智能来放大群体的智慧&#xff0c;而不是使用人工智能来代替人类。他们没有…

Qt实用快捷键(较全面)

总结整理的常用快捷键&#xff0c;欢迎留言补充&#xff01;

Python下载中国数据库大会(DTCC2020)PPT全集

目录 背景 效果展示 程序下载 网盘下载 背景 前几天中国数据库大会风风火火的在京举行了&#xff0c;期间干货满满&#xff0c;收获良多。在学大佬们的ppt时&#xff0c;发现只能一篇一篇预览&#xff0c;对于求知欲强烈的小编来说简直太难受了&#xff0c;于是便写了个程…

Android UI布局—— 仿QQ登录界面

最近&#xff0c;有点空闲的时间就拿QQ登录界面来模仿练手&#xff0c;做了个简单的登录界面。界面一般般吧&#xff0c;不算很漂亮&#xff0c;现在拿出来分享&#xff0c;希望大家一起学习与进步。有什么不足之处&#xff0c;请各位大侠多多赐教&#xff0c;谢谢。这个界面涉…

新造车公司背后的「资本大佬」

来源&#xff1a;电动汽车观察家&#xff08;ID&#xff1a;evobserver&#xff09;为了代表行业全貌&#xff0c;我们既分析光鲜靓丽的头部企业&#xff0c;也涉及比较不知名、甚至陷入舆论漩涡的一些企业&#xff0c;共十家代表企业资金的来源分析。1、蔚来汽车过往融资成绩&…