[Unity][Heap sort]用Unity动态演示堆排序的过程(How Heap Sort Works)
[Unity][Heap sort]用Unity动态演示堆排序的过程
How Heap Sort Works
最近做了一个用Unity3D动态演示堆排序过程的程序。
I've made this app to show how heap sort works recently.
效果图(Demo)
一图抵千言。
A picture paints a thousand words.


堆排序(Heap Sort)
堆排序总是建立这样一个二叉树:其父结点总大于其子结点。
Step 1: The first step of heap sort is to build a binary tree in which the parent node's value is always greater than its children nodes' value.
首先建堆。
It's called building the heap.
每轮将根结点与最后一个结点互换,然后对剩余部分建堆。
Step 2: Ater that, we swap the root node and the last node that hasn't been swapped yet.
Step 3: build the heap again like in step 1.
Step 4: if not all nodes are swapped in Step 2, goto Step2. Otherwise goto step 5.
Step 5: the heap sort is finished.
private static void HeapSortAscending1<T>(this IList<T> arr)
where T : IComparable
{
for (int i = arr.Count / - ; i >= ; i--)
{
arr.HeapAdjustAscending1(i, arr.Count);
}
for (int i = arr.Count - ; i > ; i--)
{
T temp = arr[];
arr[] = arr[i];
arr[i] = temp;
arr.HeapAdjustAscending1(, i);
}
}
private static void HeapAdjustAscending1<T>(this IList<T> arr, int nonLeafNodeToBeAdjusted, int unRangedCount)
where T:IComparable
{
int leftChild = nonLeafNodeToBeAdjusted * + ;
int rightChild = nonLeafNodeToBeAdjusted * + ;
int max = nonLeafNodeToBeAdjusted;
if (nonLeafNodeToBeAdjusted < unRangedCount / ) // 是非叶节点(None leaf node)
{
if (leftChild < unRangedCount && arr[leftChild].CompareTo(arr[max]) > )
{ max = leftChild; }
if (rightChild < unRangedCount && arr[rightChild].CompareTo(arr[max]) > )
{ max = rightChild; }
if (max!=nonLeafNodeToBeAdjusted)
{
T temp = arr[max];
arr[max] = arr[nonLeafNodeToBeAdjusted];
arr[nonLeafNodeToBeAdjusted] = temp;
arr.HeapAdjustAscending1(max, unRangedCount);
}
}
}
Heap sort
下载(Download)
如需APK安装包,请留言留下您的邮箱。如果需要源码,请捐赠100元并留下您的邮箱。
If you want the HowHeapSortWorks.apk, please leave your email address.
If you want the source code, please kindly donate ¥50 and leave your email adress:)
更新(Update)
2015-06-18
增加了'Random array'按钮,用于自动生成15个随机数,方便使用新case。
Added 'Random array' button which generates 15 random numbers as a new test case.
2015-06-21
在下方的数组显示索引。
display index for line nodes.
用表示堆所在层的颜色给下方的数组显示底色。
add background colors for line nodes.

[Unity][Heap sort]用Unity动态演示堆排序的过程(How Heap Sort Works)的更多相关文章
- PAT甲题题解1098. Insertion or Heap Sort (25)-(插入排序和堆排序)
题目就是给两个序列,第一个是排序前的,第二个是排序中的,判断它是采用插入排序还是堆排序,并且输出下一次操作后的序列. 插入排序的特点就是,前面是从小到大排列的,后面就与原序列相同. 堆排序的特点就是, ...
- 选择排序、快速排序、归并排序、堆排序、快速排序实现及Sort()函数使用
1.问题来源 在刷题是遇到字符串相关问题中使用 strcmp()函数. 在函数比较过程中有使用 排序函数 Sort(beg,end,comp),其中comp这一项理解不是很彻底. #include & ...
- Unity编程标准导引-Unity中的基本概念-2.1界面概览
Unity中的基本概念 本文我们介绍Unity中的基本概念,包括:场景.游戏对象.组件.预制件.资源等. 2.1.界面概览 打开Unity之后,我们大概可以看到以上画面,以上画面中即显示了我们最常用到 ...
- Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作
刚进公司给安排的任务就是Unity接入高德地图,算是踩了不少坑总算做出来了,抽点时间写个博客记录一下 废话不多说 先上效果图 获取定位并根据手机朝向显示周边信息 使用的Unity ...
- unity中调试模型时unity崩溃问题
这个问题是在我调试3D模型资源时出现的,每当在Scene场景中调试模型时unity崩溃,出现Unity Bug Reporter页面,反复出现这个问题,很烧脑 对于这个问题我表示很无语,但是经过不断查 ...
- [IoC容器Unity]第一回:Unity预览
1.引言 高内聚,低耦合成为一个OO架构设计的一个参考标准.高内聚是一个模块或者一个类中成员跟这个模块或者类的关系尽量高,低耦合是不同模块或者不同类之间关系尽量简单. 拿咱国家举例来说,假如你是中国人 ...
- C#开发Unity游戏教程之Unity中方法的参数
C#开发Unity游戏教程之Unity中方法的参数 Unity的方法的参数 出现在脚本中的方法,无论是在定义的时候,还是使用的时候,后面都跟着一对括号“( )”,有意义吗?看起来最多也就是起个快速识别 ...
- 关于csdn博客中案例效果的动态演示
在曾经一篇博文中,网友评论说要是案例效果是动态演示的就好了,我认为说的非常是有道理.由于一个简单的截图不能非常好的展示案例效果.要是有一张gif图能动态的播放案例效果就再好只是了.在这里提供一个小软件 ...
- 动态演示冒泡排序java
动态演示冒泡排序java //冒泡排序是一种简单的交换排序,基本思路,从数列左边开始扫描元素,在扫描过程中依次对相邻元素进行比较,将较大元素后移. public class NumberSort { ...
随机推荐
- T-SQL 递归
WITH TEMP ([ID], [PARENTID]) AS (SELECT UNIQUEID ,PID FROM [DBO].TB_DEPTINFO D WHERE PID = @ParentId ...
- axure的一些注意事项
1. 不要轻易用中继器的 载入时 事件, 感觉存在bug 2. 元件在显示和隐藏的动画过程中,不要去取他的x,y值,有几率会取成0,也不要去获取它的尺寸,只有在动画完成后才能获得 3. 装着一个中继器 ...
- EventLoop和EventLoopGroup
Netty框架的主要线程就是I/O线程,线程模型设计的好坏,决定了系统的吞吐量.并发性和安全性等架构质量属性.Netty的线程模型被精心地设计,既提升了框架的并发性能,又能在很大程度避免锁,局部实现了 ...
- 大家都在用PDA条码扫描枪管理企业仓库 PDA无线数据采集程序
PDA数据采集器又称之为手持终端,这些都是用于扫描货物条码统计数据用的,PDA扫描枪有效提高企业仓库管理,在仓库管理中引入条码技术,对仓库的到货检验.入库.出库.调拨.移库移位.库存盘点等各个作业环节 ...
- Redis——学习之路四(初识主从配置)
首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...
- PHP 显示文章发布日期 一小时前 一天前 一月前 一年前
<?PHP /*** 传入日期格式或时间戳格式时间,返回与当前时间的差距,如1分钟前,2小时前,5月前,3年前等* @param string or int $date 分两种日期格式" ...
- GridView中实现DropDownList联动
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- solr4.5安装配置 linux+tomcat6.0+mmseg4j-1.9.1分词
首先先介绍下solr的安装配置 solr下载地址 (我这用的solr-4.5.0) 运行环境 JDK 1.5或更高版本 下载地址(Solr 4以上版本,要求JDK 1.6) 我用的JDK1.6 ) ...
- Linux Shell 流程控制语句
* 本文主要介绍一些Linux Shell 常用的流程控制语句* 1. if 条件语句:if-then/if-elif-fi/if- else-fi if [条件判断逻辑1];then command ...
- React生命周期
在react生命周期中,分2段执行,一个挂载的生命周期,一个是组件发生了数据变动,或者事件触发而引发的更新生命周期. 注:react生命周期很重要,对于很多组件场景的应用发挥重要作用,而且不熟悉生命周 ...